在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
答案 0 :(得分:4)
这是多态性101.最具体的 - 即继承树中最低 - 在类层次结构中调用方法的版本。如果你没有覆盖所有的fruitName()方法,那么将调用基类方法。
答案 1 :(得分:3)
因为这就是多态性的工作原理。子类可以覆盖任何非final的方法,父代码将无法区分。这就是为什么一般不鼓励非抽象的非最终公共方法。