對於下面的代碼爲什麼打印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