4.3.6 封装
Date 对象是可变的,这一点就破坏了封装性!
Employee harry = . .
Date d = harry.getHi reDayO;
double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000;
d.setTime(d.getTime() - (long) tenYearsInMilliSeconds);
// let's give Harry ten years of added seniority
出错的原因很微妙。d 和 harry.hireDay 引用同一个对象。
对d调用更改器方法就可以自动改变这个雇员对象的私有状态。
如果需要返回一个可变对象的引用, 应该首先对它进行克隆(clone)。对象 clone 是 指存放在另一个位置上的对象副本。
return (Date) hireDay.clone();
4.4.1 静态域
private static int nextld = 1
只有一 个静态域 nextld。即使没有一个雇员对象, 静态域 nextld 也存在。它属于类,而不属于任何 独立的对象。