This question already has answers here:
Is there a way to override class variables in Java?
(17个答案)
Overriding member variables in Java ( Variable Hiding)
(12个答案)
3年前关闭。
我无法理解以下输出。
我不知道为什么输出是10,我认为
为什么这样工作..请解释。
看到
如果您真的想一次看到两者,请参见以下示例。
和
(17个答案)
Overriding member variables in Java ( Variable Hiding)
(12个答案)
3年前关闭。
我无法理解以下输出。
我不知道为什么输出是10,我认为
A a = new B()
行创建了B类的新实例,我认为结果应该是20class 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);
}
}
为什么这样工作..请解释。
最佳答案
首先,请参见Hiding Fields(添加了重点)
换句话说,这不是“继承”,因为您实际上是将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
09-25 20:21