gpt4 book ai didi

Java 继承字段

转载 作者:IT老高 更新时间:2023-10-28 21:10:01 24 4
gpt4 key购买 nike

我无法理解以下输出。

我不知道为什么输出是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);
}
}

为什么会这样......请解释一下。

最佳答案

首先,请参阅 Hiding Fields (强调)

Within a class, a field that has the same name as a field in the superclass hides the superclass's field, even if their types are different

换句话说,这不是“继承”,因为您实际上将 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 继承字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com