为什么我们不能覆盖子类中超类的实例变量?
他或许打算尝试覆盖用于初始化变量的值.例如,
public abstract class A { String help = "**no help defined -- somebody should change that***"; // ... } // ... public class B extends A { // ILLEGAL @Override String help = "some fancy help message for B"; // ... }
public abstract class A { public String getHelp() { return "**no help defined -- somebody should change that***"; } // ... } // ... public class B extends A { @Override public String getHelp() { return "some fancy help message for B"; // ... }
因为如果你改变了数据成员的实现,它很可能会破坏超类(想象一下将超类的数据成员从float更改为String).
因为您只能覆盖行为而不是结构.一旦创建了一个对象并为其分配了内存,就会将结构设置在一起.当然,这在静态类型语言中通常是正确的.
变量不是多态访问的.对于受保护变量无法做到的事情,您想要做什么?(并不是说我个人鼓励使用非私有的可变变量.)