Это вопрос только из любопытства.
Я знаю, что когда мы вызываем переопределенный метод объекта подкласса по ссылке суперкласса, 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 для вызова метода superclass eat(), а не подкласса? Я знаю, что это вопрос, который несколько противоречит законам полиморфизма, но вы никогда не знаете, когда может возникнуть необходимость в этом.
Я попытался привить ссылку h к Animal, но не повезло. Любые идеи?