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);

}

}

为什么这样工作..请解释。

回答:

首先,请参见

(添加了重点)

在一个类中,与超 同名的字段会 ,即使它们的类型不同

换句话说,这是不是“遗产”,因为你实际上隐藏Ai背后Bi,和你正在使用的参考对象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

回到顶部