根据我们的教授的说法,应不惜一切代价避免使用受保护的可见性。但是,我对为什么有些疑惑。说我们有这个例子:
public abstract class Animal {
private int maxSpeed;
public Animal() {}
public abstract void setMaxSpeed();
}
每个
Animal
具有最大速度,该速度需要稍后在子类中定义。但是,将其抛出:public class Tutrle extends Animal {
public Tutrle() {
}
@Override
public void setMaxSpeed() {
}
}
无法从覆盖的
maxSpeed
方法中访问setMaxSpeed()
变量。尽管一种解决方案是通过maxSpeed
类的构造函数设置Animal
,但最好不要将maxSpeed
变量设置为protected
并让以后所有子级子类都可以访问它? 最佳答案
由于maxSpeed
成员是在Animal
类中定义的,因此对该类使用可以对其进行设置的非抽象方法更有意义:
public void setMaxSpeed(int maxSpeed)
{
this.maxSpeed = maxSpeed;
}
子类(例如
Turtle
)可以重写此方法以添加逻辑,但是它们应调用基类来设置值。@Override
public void setMaxSpeed(int maxSpeed)
{
if (maxSpeed > 5)
throw new SomeException();
super.setMaxSpeed(maxSpeed);
}
如果
setMaxSpeed()
保持抽象,则对于实现此方法的每个子类来说,都有自己的maxSpeed
成员会更有意义。