封装
封装指将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装也是面向对象的特征之一,是对象和类概念的主要特性。
为什么需要封装?
封装为了不让秘密外露,比如别人不需要知道你是否有一条猛男必备的骚粉色内裤,你也不需要知道你女神家里房间有多乱。
不管是别人知道你太多,还是你知道别人太多都是不好的。
所以有安全性
就好像如果你想发布一条仅女神可见的朋友圈,屏蔽其他人,尤其是前女友。
再好比有朋友去你家,他看重你新买的手办,却只能看,不能拿走。
所以其实面向对象真的都是很生活的概念。
那么我们就需要将这些“秘密”加上“锁和钥匙”:
封装的步骤
- 用属性私有化(private)上锁
- 通过(set/get)方法进行访问和设置,提供锁孔
- 对属性是否符合业务范围的校验,配置钥匙
比如你在程序中私有化了sex属性,并提供了对外的get和set方法。
当外界使用set方法为属性设值的时,你可以在set方法里面做个if判断,只可填入“男”或“女”,数字等无效,那样他就不能随意赋值了。
public class Dog {
//定义属性:类所具备的特质 私有化属性
private String name;
private int health;
private int love;
private String strain;
//添加公开的set/get访问器
public String getName() {
return name;
}
public void setName(String name) {
if (name.equals("")) {
System.err.println("姓名不能为空");
} else {
this.name = name;
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if (health>0&&health<=100) {
//将数据赋值给对应的属性
this.health=health;
} else {
System.err.println("健康值赋值不合理");
}
}
public int getLove() {
return love;
}
public void setLove(int love) {
if (love>0&&love<=100) {
//将数据赋值给对应的属性
this.love=love;
} else {
System.err.println("亲密度赋值不合理");
}
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
public static void main(String[] args) {
Dog gou=new Dog();
//错误赋值方法
gou.health=100;
//正确赋值方法
gou.setHealth(100);
//输出健康值
System.out.println(gou.getHealth());
}
提高了代码复用率
比如在工具中封装的各种方法,可以任意调用,而不用每处去实现细节。当然也可通过继承,来提高复用。
get/set访问器的快捷键
Alt/Shift + S+ R