美文网首页
Java--抽象类及子类实例化顺序和方法调用顺序测试

Java--抽象类及子类实例化顺序和方法调用顺序测试

作者: 年少懵懂丶流年梦 | 来源:发表于2019-03-05 15:21 被阅读0次

转至 https://blog.csdn.net/wo541075754/article/details/51523639,感谢作者

抽象类:

package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public abstract class Fruit {

    protected Fruit(){
        System.out.println("实例化父类");
        toPlant();
        toEat();
    }

    protected abstract void toEat();

    protected abstract void toPlant();

}

子类Banana:

package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class Banana extends Fruit{

    protected Banana(){
        System.out.println("实例化子类 Banana");

    }

    @Override
    protected void toEat() {
        System.out.println("Eat a Banana");
    }

    @Override
    protected void toPlant() {
        System.out.println("Plant a Banana");
    }

}

子类Orange:

package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class Orange  extends Fruit{

    public Orange() {
        System.out.println("实例化子类 Orange");
    }

    @Override
    protected void toEat() {
        System.out.println("Eat a Orange");
    }

    @Override
    protected void toPlant() {
        System.out.println("Plant a Orange");
    }

}

测试类:

package com.secbro.test.abstractInit;

/**
 * @author zhuzhisheng
 * @Description
 * @date on 2016/5/28.
 */
public class TestFruit {
    public static void main(String[] args) {
        new Banana();
        new Orange();
    }
}

执行结果打印:

实例化父类
Plant a Banana
Eat a Banana
实例化子类 Banana
实例化父类
Plant a Orange
Eat a Orange
实例化子类 Orange

结果分析

  1. 查看子类、抽象类的构造方法打印结果可知,实例化子类时先实例化父类。
  2. 在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应实例化的子类实现了此方法,在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。
  3. 不同的类实例化打印不同的抽象方法实现,java多态的一种表现形式。

相关文章

网友评论

      本文标题:Java--抽象类及子类实例化顺序和方法调用顺序测试

      本文链接:https://www.haomeiwen.com/subject/dioedftx.html