0

我不确定我是否对双重调度有错误的想法。但这就是我的想法:

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 ???????

由于Javas Single diapatch,我认为Java在运行时将objA正确解析为Achild,而在编译时将参数解析为B。请告诉我哪里弄错了?

4

2 回答 2

1

看不到为什么应该打印“B-Parent”而不是“B-Child”的原因

     B objB = new BChild();
     objA.testA(objB);

objB实际上有一个 B 的子实例。所以B-Child将被打印出来。所以这是运行时绑定或 Java 的多态特性 :)

于 2013-01-25T06:24:41.003 回答
-3

您需要使用http://en.wikipedia.org/wiki/Visitor_pattern在 java 中实现双重调度。

于 2013-01-25T06:17:44.260 回答