二重発送について間違った考えを持っているかどうかはわかりません。しかし、これは私が考えたことです:
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 に解決されると思いました。どこを間違えたのか教えてください。