gpt4 book ai didi

java - 获得此输出的可能原因是什么?

转载 作者:行者123 更新时间:2023-12-01 18:03:43 25 4
gpt4 key购买 nike

这是我在某个网站上发现的一个问题。代码如下。

public class Test {
public static void main(String[] args) {
new B();
}
}

class A {
int i = 7;

public A() {
setI(20);
System.out.println("i from A is " + i);
}

public void setI(int i) {
this.i = 2 * i;
}
}

class B extends A {
public B() {
// System.out.println("i from B is " + i);
}

public void setI(int i) {
this.i = 3 * i;
}
}

我想知道为什么 A 的 i 的输出是 60 而不是 40。提前致谢 =)

最佳答案

这是简单的多态性。

您正在创建一个 B 对象,因此当 A 构造函数调用 setI() 时,它正在调用“B 版本”(这导致 3*20 = 60)。

换句话说:当您在 Java 中调用对象的方法时,JVM 将在运行时检查该对象属于哪个具体类;并调用它在那个类上找到的方法。因此:setI() 在其“B”版本中仅被调用一次。

当您将不同的打印行语句放入两个 setter 中时,您可以轻松地计算出这一点。

关于java - 获得此输出的可能原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569485/

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