2601: 封装模拟练习
金币值:2
定数:3
时间限制:1.000 s
内存限制:128 M
解决:5
提交:21
正确率:23.81% 命题人:
题目描述
任务描述
本题任务:构造一个类,把对象的属性封装起来,同时提供一些可以被外界访问属性的方法。
相关知识
为了完成本题任务,你需要掌握: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岁