我不確定是否對雙派遣有錯誤的想法。但是,這是我的想法:Java中的雙派遣
class A{
void testA(B obj){
System.out.println("A-Parent");
obj.testB();
}
}
class AChild extends A{
void testA(B obj){
System.out.println("A-Child");
obj.testB();
}
}
class B{
void testB(){
System.out.println("B-Parent");
}
}
class BChild extends B{
void testB(){
System.out.println("B-Child");
}
}
class Launcher{
public static void main(){
A objA = new AChild();
B objB = new BChild();
objA.testA(objB);
}
}
What I expected:
A-Child
B-Parent
Actual output:
A-Child
B-Child // How ???????
我認爲Java的運行期間正確解析objA到Achild而參數是在編譯時解析爲B,由於Java類單diapatch。請告訴我我哪裏錯了?
改變,在記事本中寫入代碼的危險:) – broun
考慮改變你的主要方法也!!! –
在這裏找到問題。我認爲,因爲參數是靜態解決的,所得到的方法將使用解析類中定義的方法。但是java總是在運行時解析接收者對象。 http://java.dzone.com/articles/multiple-dispatch-fix-some – broun