重写超类的实例变量

2022-09-01 11:11:34

为什么我们不能重写子类中超类的实例变量?


答案 1

他可能打算尝试覆盖用于初始化变量的值。例如

而不是这个(这是非法的)

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";
    // ...
}

答案 2

因为如果更改数据成员的实现,它很可能会破坏超类(想象一下,将超类的数据成员从浮点数更改为字符串)。


推荐