为什么实例变量不调用Upcasting中的方法?

时间:2016-05-13 07:51:18

标签: java polymorphism runtime

我有父类Animal和子类Dog

public class Animal {
public void bark() {
    System.out.println("sua");
}

}

public class Dog extends Animal {
public void bark() {
    System.out.println("Go go");
}
public void eat(){
    System.out.println("an com");
}

}

和班级主

public class MainDemo {

public static void main(String[] args) {
    Animal animal = new Dog();
    animal.bark();
    animal.eat();
}

}

为什么实例动物在多态运行时

期间没有调用方法
  

线程中的异常" main" java.lang.Error:未解决的编译问题:       对于Animal

类型,方法eat()未定义
at tinhdahinh.MainDemo.main(MainDemo.java:8)

1 个答案:

答案 0 :(得分:0)

基类必须声明由派生类重写的任何方法。它不必实现它们,但必须声明该方法,以便当基类的派生对象调用该方法时,虚拟调度程序知道如何将调用路由到正确的位置。 在Animal类中,添加此声明:

abstract void eat();

此方法强制派生类实现eat方法。如果您不想强制它们使用eat方法,请提供一个空实现:

public void eat() { }