这是我在某个网站上发现的一个问题。代码是这样的。
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的输出是60而不是40.提前感谢=)
答案 0 :(得分:4)
这是简单的多态性。
你正在创建一个B对象,所以当A构造函数调用setI()时,它正在调用" B版本" (导致3 * 20 = 60)。
换句话说:当您在Java中调用对象上的方法时,JVM将在运行时检查该对象是哪个具体类;并调用它在那个类上找到的方法。因此:setI()在其" B"中被调用一次。版本
当您将不同的打印行语句放入两个设置器时,您可以很容易地想到这一点。