私は 2 つのプログラムを読みましたが、どちらも多態的なオブジェクト参照をメソッドに渡しています。実行時のメソッドが参照型に依存するのか、実際のオブジェクトに依存するのか混乱しています。
プログラム 1:
class A
{
public void display()
{
System.out.println("A's display method");
}
}
class B extends A
{
public void display()
{
System.out.println("In B's display method");
}
}
class Displayer
{
public void foo(A ob)
{
ob.display();
}
}
class Tester
{
public static void main(String ar[])
{
B ob=new B();
Displayer ob1=new Displayer();
ob1.foo(ob);
}
}
プログラム 2:
class GameShape
{
public void displayShape()
{
System.out.println("displaying shape);
}
}
class PlayerPiece extends GameShape
{
public void movepiece()
{
System.out.println("moving game piece");
}
}
class TilePiece extends GameShape
{
public void getAdjacent()
{
System.out.println("getting adjacent tiles");
}
}
class TestShapes
{
public static void main(String ar[])
{
PlayerPiece player = new PlayerPiece()
TilePiece tile = new TilePiece()
doShapes(player);
doShapes(tile);
}
public static void doShapes(GameShape shape)
{
shape.displayShape();
}
}
プログラム 1 では、メソッドは実際のオブジェクトに基づいて実行されますが、プログラム 2 では、メソッドは参照型に基づいて実行されます。私はそれらの違いを理解できません。
詳細な説明をいただければ幸いです。