如果我在同一个包中调用它,为什么我需要这个实例方法的public修饰符?
public String toString() {
if (isOn()) {
return "Speed is " + speed + ", color is " + color
+ " and radius is " + radius;
}
else
return "Fan is off. " + "Color is " + color
+ " and radius is " + radius;
}
答案 0 :(得分:3)
因为您实际上正在尝试覆盖 Object.toString()
。
由于该方法是公开的,因此您的辅助功能必须匹配。
答案 1 :(得分:2)
因为你从[class]对象覆盖它,并且它是公开的。您无法覆盖和更改访问修饰符 - 它不会覆盖。
答案 2 :(得分:2)
您尝试覆盖默认的toString()
方法。这种方法是公开的,因此你的方法也必须是公开的。
您不允许更改父类的任何重写函数的可见性,因为所有子类都必须是父类的实例。
如果您突然将toString()
更改为私有,则您的对象不再是有效的Object
。
您可能需要阅读此http://en.wikipedia.org/wiki/Liskov_substitution_principle