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

测试目的

  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多态的一种表现形式。
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序新视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值