Polimorfismo Java
Esta é uma questão apenas por curiosidade.
Eu sei que quando chamamos o método substituído de um objeto de subclasse pela referência de sua superclasse, a JVM dá importância ao tipo de objeto e não ao tipo de referência.
Este é o meu código simples:
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();
}
}
Como esperado, recebo a saída:
run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)
Agora, minha pergunta é: Existe alguma maneira de usarmos a referência h para chamar o método superclass eat () e não o da subclasse? Eu sei que esta é uma questão que é um pouco contra as leis do polimorfismo, mas você nunca sabe quando a necessidade pode surgir para fazê-lo.
Eu tentei typecast a referência h para Animal, mas sem sorte. Alguma ideia?