これはただの好奇心からの質問です。
サブクラス オブジェクトのオーバーライドされたメソッドをそのスーパークラスの参照によって呼び出す場合、JVM は参照の型ではなくオブジェクトの型を重視することを私は知っています。
これは私の簡単なコードです:
class Animal
{
void eat()
{
System.out.println("Animal is eating...");
}
}
class Horse extends Animal
{
@Override
void eat()
{
System.out.println("Horse is eating...");
}
}
public class PolymorphismTest
{
public static void main(String...args)
{
Animal a=new Animal();
a.eat();
Animal h= new Horse();
h.eat();
}
}
予想通り、出力が得られます:
run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)
ここで私の質問は、参照 h を使用して、サブクラスではなくスーパークラスの eat() メソッドを呼び出す方法はありますか? これがポリモーフィズムの法則に多少反する質問であることは承知していますが、いつそうする必要が生じるかはわかりません。
参照 h を Animal に型キャストしようとしましたが、うまくいきませんでした。何か案は?