Polimorfizm Java

To jest pytanie z ciekawości.

Wiem, że gdy wywołamy metodę przesłonięcia podklasy przez odniesienie do jej nadklasy, JVM nadaje znaczenie typowi obiektu, a nie typowi odniesienia.

To jest mój prosty kod:

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();
    }
}

Zgodnie z oczekiwaniami otrzymuję dane wyjściowe:

run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)

Teraz moje pytanie brzmi: czy jest jakiś sposób, abyśmy mogli użyć referencji h do wywołania metody eat () nadklasy, a nie metody podklasy? Wiem, że jest to pytanie, które jest nieco sprzeczne z prawami polimorfizmu, ale nigdy nie wiadomo, kiedy pojawi się taka potrzeba.

Próbowałem wpisać referencję h do Animal, ale nie miałem szczęścia. Jakieś pomysły?

questionAnswers(4)

yourAnswerToTheQuestion