受保护的方法与受保护的财产



子类需要能够使用种子随机数生成器。

使用有什么优缺点

public abstract class AbstractClass {
protected Random rnd;
public AbstractClass(long seed) {
rnd = new Random(seed);
}
}

public abstract class AbstractClass {
private Random rnd;
public AbstractClass(long seed) {
rnd = new Random(seed);
}
protected Random getRnd() {
return rnd;
}
protected Random setRnd(Random rnd) {
this.rnd = rnd;
}
}

protected成员是公共API的一部分。也就是说,对于稍后(可能几年后(出现并编写子类的开发人员来说,它们是完全可见的。他们甚至可以覆盖这些方法并使它们public(可见性扩大是有效的,可见性缩小不是(。

因此,应避免使用protected字段,就像避免使用public字段一样:它们禁止将来更改类不变量或行为的扩展。

例如,如果需要返回延迟实例化或线程本地对象,该怎么办?对于protected字段,这一切都是不可能的。不过,受保护的领域是否是最好的解决方案是有争议的。

(Effective Java,第13和17项(

最新更新