Javainheritance – 实例variables覆盖

为什么超类的实例variables不能在inheritance中使用?

因为inheritance是为了修改行为。 行为通过方法暴露,这就是为什么他们可以被覆盖。

字段不是行为,而是状态。 你不需要修改它,也不需要修改超类的私有方法。 他们的目的是让超class做这个工作。

您可以隐藏一个字段,但不能覆盖它。

隐藏意味着根据所访问的类别,字段将具有不同的值。 子类中的字段将“隐藏”超类中的字段,但都存在。

这是一个非常糟糕的做法隐藏领域,但工程:

public class HideField { public static class A { String name = "a"; public void doIt1() { System.out.println( name ); }; public void doIt2() { System.out.println( name ); }; } public static class B extends A { String name = "b"; public void doIt2() { System.out.println( name ); }; } public static void main(String[] args) { A a = new A(); B b = new B(); a.doIt1(); // print a b.doIt1(); // print a a.doIt2(); // print a b.doIt2(); // print b <-- B.name hides A.name } } 

取决于方法是否被覆盖AB的字段被访问。

永远不要这样做! 这不是你的问题的解决scheme,并创build与inheritance有关的微妙的错误。