封装的基本原则
设计类时将实例变量标记为私有,并提供公有的getter和setter方法
在某一项目中,如果我们设计Dog类为
class Dog {
int height;
}
那么根据类创建出的theDog对象height实例变量将可以直接修改,且无法增加任何校验,若异常情况导致theDog.height=0语句出现,该语句将执行成功,并引发不可预知的错误场景。
根据封装的基本原则,应该将Dog类设计为
class Dog {
private int height;
public int getHeight() {
return height;
}
public void setHeight(int height) {
// 我们可以选择增加合法性校验,且在校验调整时无需修改其他部分代码
if(height <= 0){
System.out.println("Dog高度必须大于0");
}
this.height = height;
}
}
实际程序中很多类的getter和setter方法什么事情也没做,只是把值设给变量,看上去和变量公有的效果一样,存在数据非法性问题,但好处是事后可以改变想法增加校验,却不需改变其他部分的程序。
参考文档:Head First Java