当前位置:  开发笔记 > 编程语言 > 正文

覆盖超类的实例变量

如何解决《覆盖超类的实例变量》经验,为你挑选了4个好方法。

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



1> Pierre D..:

他或许打算尝试覆盖用于初始化变量的值.例如,

而不是这(这是非法的)

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


另外,如果你在超类`abstract`中创建`getHelp()`方法,你可以强制子类为它提供一个实现,而不是希望它们覆盖它.

2> cletus..:

因为如果你改变了数据成员的实现,它很可能会破坏超类(想象一下将超类的数据成员从float更改为String).



3> Adrian Zanes..:

因为您只能覆盖行为而不是结构.一旦创建了一个对象并为其分配了内存,就会将结构设置在一起.当然,这在静态类型语言中通常是正确的.



4> Jon Skeet..:

变量不是多态访问的.对于受保护变量无法做到的事情,您想要做什么?(并不是说我个人鼓励使用非私有的可变变量.)

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有