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

Java基础 专栏收录该内容
119 篇文章 8 订阅

测试目的

  1. 验证抽象类及子类实例化顺序;
  2. 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法;
  3. 验证java的多态性

实例

抽象类:

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多态的一种表现形式。
  • 4
    点赞
  • 4
    评论
  • 10
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值