对于下面的代码,为什么会打印出 A, B?我原以为应该是 B, B。
另外,JVM 执行的方法调用是动态评估还是静态评估?
public class Main {
class A {
}
class B extends A {
}
public void call(A a) {
System.out.println("I'm A");
}
public void call(B a) {
System.out.println("I'm B");
}
public static void main(String[] args) {
Main m = new Main();
m.runTest();
}
void runTest() {
A a = new B();
B b = new B();
call(a);
call(b);
}
}