即使对象是子类,也调用超类方法
我正在玩简单的重载覆盖规则,并发现了一些有趣的东西。这是我的代码。
package com.demo;
public class Animal {
private void eat() {
System.out.println("animal eating");
}
public static void main(String args[]) {
Animal a = new Horse();
a.eat();
}
}
class Horse extends Animal {
public void eat() {
System.out.println("Horse eating");
}
}
该程序输出以下内容。
动物食用
以下是我所知道的:
- 由于我们有方法,它肯定不会在子类中访问,因此这里不会出现方法覆盖的问题,因为JLS清楚地定义了它。
private void eat()
- 现在这不是方法重写,它绝对不会从Horse类调用方法
public void eat()
- 现在我们的声明是有效的,因为多态性。
Animal a = new Horse();
为什么从类中调用方法?我们正在创建一个对象,那么为什么调用 Animal 类的方法呢?a.eat()
Animal
Horse