对于下面的代码为什么打印A,B?我期望它打印B,B。 另外,JVM执行的方法调用是动态还是静态评估?Java方法调用重载逻辑
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);
}
}
谢谢,那么什么是动态评估? – 2010-01-05 14:05:00
@Maxim Veksler:覆盖 - 由目标对象的* actual *类型决定,而不是编译时类型。 – 2010-01-05 14:05:41
非常感谢Jon。 – 2010-01-05 14:12:56