这是我在某个网站上发现的一个问题。代码如下。
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/