思考:下面的代码有什么不合理的地方?
Dog d = new Dog();
d.health = -1000;
问题:属性值可以被任何人任意访问和修改,可能会设置不合理赋值,安全性差。
如何解决?
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装两个大致原则:
1.把所有的属性藏起来
2.把尽可能多的东西藏起来,对外提供便捷的接口
如何实现封装?
1.修改属性的可见性:设为private,防止错误的属性修改
2.创建公有的getter/setter方法:用于属性的读写(开放的“接口”)
3.在getter/setter方法中加入属性控制语句:对属性值的合法性进行判断
课堂举例:
使用封装修改狗狗类,使健康赋值在狗狗类中进行判断。
关键代码:
private int health;
public int getHealth(){
return health;
}
public void setHealth(int health){
if (health<0||health>100){
System.out.println("狗狗的健康只能在0-100之间!");
this.health = 60;
return;
}
this.health = health;
}
课堂练习:
使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度
·保证健康值的有效性(0~100),否则取默认值60
·保证亲密度的有效性(0~100),否则取默认值60