我不确定是否对双派遣有错误的想法。但是,这是我的想法: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