首先,请参见
隐藏字段
(添加了重点)
在一个类中,与超 类中的字段 同名的字段会 隐藏超类的字段 ,即使它们的类型不同
换句话说,这是不是“遗产”,因为你实际上隐藏
A的
i背后
B的
i,和你正在使用的参考对象
A,所以你得到它的领域。如果这样做了
B b =new B(),您将看到
20预期的效果。
如果期望真正的替代,请尝试使用方法。
class A { public int get() { return 10; }}class B extends A { @Override public int get() { return 20; }}看到
A a = new B();System.out.print(a.get()); // 20
如果您真的想一次看到两者,请参见以下示例。
class A { int i = 10;}class B extends A { int i = 20; @Override public String toString() { return String.format("super: %d; this: %d", super.i, this.i); }}和
A a = new B();System.out.print(a); // super: 10; this: 20



