出于好奇,这是一个问题。

我知道,当我们通过其父类(super class)的引用调用子类对象的重写方法时,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调用父类(super class)eat()方法,而不是子类?我知道这是一个与多态性定律背道而驰的问题,但是您永远不知道何时会需要这样做。

我试图将引用h转换为Animal,但没有运气。有任何想法吗?

最佳答案

class Horse extends Animal
{
    @Override
    void eat()
    {
        super.eat();
    }
}

10-08 13:21