gpt4 book ai didi

java - 在子类和父类(super class)中具有相同的变量

转载 作者:搜寻专家 更新时间:2023-11-01 02:08:06 25 4
gpt4 key购买 nike

在这个问题中,输出为 Rose0。但是当我按照逻辑进行分析时,我觉得答案一定是 Rose100 而不是 Rose0。编译器如何区分两个类中的 i 。由于 Rosea 扩展了 _39 类,它也具有父类(super class) i。但是在第 1 行中,如果我更改 super.i,那么我将获得 Rose100。这有何不同?

class _39 {
int i;

_39(){
i=100;
foo();
}

public void foo(){
System.out.println("Flower"+i);}
}
}

public class Rosea extends _39{

int i=200;

Rosea(){
i=300;
}

public void foo(){
System.out.println("Rose"+i);
} //line 1

public static void main(String[] args) {
new Rosea();
}
}

最佳答案

首先,子类中的变量i隐藏父类(super class)中的变量。因此,如果您想访问 _39.i,则必须在 Rosea 中编写 super.i

其次:即使在父类(super class)中调用foo,也会调用子类中的实现。

...

_39() {
i = 100;
foo(); <--------------- this calls this
} |
|
... |
|
public class Rosea extends _39 { |
... |
public void foo() { <-------'
System.out.println("Rose" + i);
}
...
}

并且在 Rosea.foo 中,i 指的是 Rosea_39 以来的 i 版本.i 是隐藏的。

Java 中的所有方法都是虚拟的,即对象的运行时类型决定调用哪个方法。 (即使如果调用是从父类(super class)中进行的。)

进一步阅读:

关于java - 在子类和父类(super class)中具有相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083545/

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