退化类:
// Degenerate classes like this should not be public!
class Point {
public double x;
public double y;
}
坚持面向对象的设计方法, 对于可变的类来说, 应该用包含私有域和公有方法的类来替代:
// Encapsulation of data by accessor methods and mutators
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() { return x; }
public double getY() { return y; }
public void setX(double x) { this.x = x; }
publid void setY(double y) { this.y = y; }
}
如果类可以在它所在的包的外部进行访问,就提供访问方法.
如果类是包级私有的,或者是私有的嵌套类,直接暴露它数据域并没有本质的错误.
如果域是不可变的,暴露出来的危害相对较小一些.
总之,公有类永远都不应该暴露可变的域.