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-Child」の代わりに「B-Parent」を印刷する理由がわかりません

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

objBには実際には B の子のインスタンスがあります。したがって、B-Childが出力されます。したがって、これは Java の実行時バインディングまたはポリモーフィズム機能です:)

于 2013-01-25T06:24:41.003 に答える
-3

Java でダブル ディスパッチを実装するには、 http://en.wikipedia.org/wiki/Visitor_patternを使用する必要があります。

于 2013-01-25T06:17:44.260 に答える