2601: 封装模拟练习
金币值:2
定数:3
时间限制:1.000 s
内存限制:128 M
正确:4
提交:11
正确率:36.36% 命题人:
题目描述
任务描述
本题任务:构造一个类,把对象的属性封装起来,同时提供一些可以被外界访问属性的方法。
相关知识
为了完成本题任务,你需要掌握:1.什么是封装;2.封装的意义;3.实现Java封装的步骤。
什么是封装
封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。封装的意义
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
实现Java封装的步骤
修改属性的可见性来限制对属性的访问(一般限制为private),例如:public class Person { private String name; private int age; }这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
/* *封装演示 */ public class Person { /* * 对属性的封装 一个人的姓名、性别和年龄都是这个人的私有属性 */ private String name; private String sex; private int age; /* * setter()、getter()是该对象对外开放的接口 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码,就可以对成员变量进行更精确的控制。
public void setAge(int age) { if (age > 120) { System.out.println("ERROR:error age input...."); // 提示错误信息 } else { this.age = age; } } public String getSexName() { if ("0".equals(sex)) { sexName = "女"; } else if ("1".equals(sex)) { sexName = "男"; } else { sexName = "人妖"; } return sexName; }
编程要求
根据提示,在下方Begin-End处补充代码,要求:
测试说明
见下方样例输入输出.
测试代码
请根据提示补全代码.为防止面向答案输出,本题已设置为提交部分代码模式,请注意代码补全提交内容,你只需提交代码补全开始处和代码补全结束处的代码即可,提交全部代码会报CE(编译错误).
测试代码 复制
public class Main {
public static void main(String[] args) {
// 声明并实例化一Person对象p
Person p = new Person();
// 给p中的属性赋值
p.setName("张三");
p.setAge(18);
// 调用Person类中的talk()方法
p.talk();
}
}
// 在这里定义Person类
class Person {
/********* 代码提交补全开始 *********/
/********* 代码提交补全结束 *********/
}
输出样例 复制
我是:张三,今年:18岁