子类需要能够使用种子随机数生成器。
使用有什么优缺点
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项(