在 Java 中重写类变量:一个隐藏的谜团
这个问题来自一个有趣的代码片段,它围绕类层次结构,特别是围绕类层次结构一个名为 Dad 的父类和一个名为 Son 的子类。这两个类都拥有一个名为 me 的类变量,旨在表示它们的身份。但是,当实例化 Son 对象并调用其 printMe() 方法的 doIt() 方法打印“dad”而不是预期的“son”时,就会出现问题。
类变量可以是重写?
为了回答这个问题,我们深入研究 Java 中继承和重写的概念。重写是指子类修改其超类中定义的方法的行为的能力。然而,这个概念并没有扩展到类变量。
隐藏与覆盖
对于类变量,发生的不是覆盖而是“隐藏”。 ”当子类声明一个与其超类中的变量同名的类变量时,它会隐藏继承的变量而不是替换它。隐藏变量在子类中被有效地屏蔽。
隐藏值
回到示例,Son 中的 me 声明隐藏了继承自的 me 变量爸爸。但是,Dad 中的隐藏变量保留其值“dad”,并且是在 printMe() 方法中访问和打印的变量。
替代解决方案
为了达到打印“son”的预期结果,另一种方法是利用子类的构造函数中定义的实例变量(非静态变量)。该方法允许子类拥有自己独特的身份,而不影响其超类的类变量。
结论
本质上,没有直接的机制来重写类Java 中的变量。子类和超类之间的关系涉及隐藏和继承,允许子类在不修改父类原有值的情况下拥有自己独特的特性。在需要不同身份的情况下,使用实例变量提供了更合适的解决方案。
以上是为什么我的 Java 子类打印父类的静态变量而不是它自己的?的详细内容。更多信息请关注PHP中文网其他相关文章!