Java核心技术第四章——1.封装性
封装性(有时称为数据隐藏):
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域值。程序仅通过对象的方法与对象的数据进行交互。
给对象赋予了“黑盒”的特征,提高了重用性和可靠性。简而言之,就是只需知道方法对应的作用,而不必了解它的具体实现过程。
有些时候,需要获得或设置实例域的值,应该提供下面三项内容:
1.一个私有的数据源;
2.一个公有的域访问器方法
3.一个公有的域更改器方法
私有的数据域:
-
私有数据域即写在全局的私有变量或常量。私有数据域要比公有数据域要复杂,因为需要增加私有数据域对应的域访问器和域更改器方法,但是却有下列明显好处:
- 1 在该类的方法中修改实现方式,不会影响到其他的代码,如修改getBrithday的返回值和修改其内部实现方式。
2.1 如果出现异常,那么更改器方法(即set方法)可以执行错误检查(debug)。若是公有的数据域,可以直接对其赋值,那么错误出现的地方就可能有很多了。
公有的访问器和更改器方法:
访问器访问则是get方法,更改器方法则是set方法。此处需要注意:尽量不要返回引用可变对象的访问器方法。看不懂?看下图:
因为Date类型中有setTime方法,如果直接返回引用对象,并且再使用setTime修改其对象,那么就会破坏掉封装性。而应该使用Object的clone(克隆)方法进行拷贝数据域,如下图
当要修改UserInfo中的brithday时,再调用其对应的更改器方法(setBrithday)即可。