Java继承字段
我无法理解以下输出。
我不知道为什么输出为10,我认为该行A a = new B()
创建了B类的新实例,我认为结果应为20
class A { int i = 10;
}
class B extends A {
int i = 20;
}
public class MainClass {
public static void main(String[] args) {
A a = new B();
System.out.println(a.i);
}
}
为什么这样工作..请解释。
回答:
首先,请参见
(添加了重点)
在一个类中,与超 同名的字段会 ,即使它们的类型不同
换句话说,这是不是“遗产”,因为你实际上隐藏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
以上是 Java继承字段 的全部内容, 来源链接: utcz.com/qa/421495.html