调用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()调用的情况下调用父方法。

请帮助我@第12行

最佳答案

这是多态性101。在类层次结构中调用方法的最特定版本(即,在继承树上最低)。如果您根本没有覆盖fruitName()方法,则将调用基类方法。

10-04 18:16