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?