这个问题只是出于好奇。
我知道当我们通过引用它的超类来调用子类对象的覆盖方法时,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 但没有运气。有任何想法吗?