Javainheritance:为什么在父构造函数级别调用方法,调用重写的子方法?

在Fruit构造函数中调用fruitName方法,实际上是将调用委托给子类Apple类的方法!

public class CallingParentMethodInInheritanceHierarchy { abstract class Fruit { String fruitName; public Fruit(String fruitName) { this.fruitName = fruitName; /* * o/p - Inside constructor - Child: Fruit name is - Apple */ System.out.println("Inside constructor - " + fruitName()); // doubt? } public String fruitName() { return "Parent: Fruit name is - " + fruitName; } public abstract String type(); } class Apple extends Fruit { public Apple() { super("Apple"); } public String fruitName() { /* * To call the super class method, only way is - * * System.out.println(super.fruitName()); */ return "Child: Fruit name is - " + fruitName; } @Override public String type() { return "AllSeasonsFruit"; } } public static void main(String[] args) { Fruit fruit = new CallingParentMethodInInheritanceHierarchy().new Apple(); /* * o/p - Child: Fruit name is - Apple */ System.out.println(fruit.fruitName()); } 

}

这背后的主要尝试是,我试图调用父方法而不使用在子方法中调用super.fruitName()的简单方法。

请帮助我@line#12

这是多态101.最具体的 – 即inheritance树中最低 – 在类层次结构中调用方法的版本。 如果你根本没有覆盖fruitName()方法那么将调用基类方法。

因为这就是多态性的工作原理。 子类可以覆盖任何非final的方法,父代码将无法区分。 这就是为什么通常不鼓励非抽象的非最终公共方法。