前端开发 \ JavaScript \ Java抽象类及子类实例化顺序和方法调用顺序测试

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

总点击152
简介:版权声明:本文为博主原创文章,转载请写明出处。https://blog.csdn.net/wo541075754/article/details/51523639

版权声明:本文为博主原创文章,转载请写明出处。 https://blog.csdn.net/wo541075754/article/details/51523639

测试目的

验证抽象类及子类实例化顺序;

验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法;

验证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

结果分析

查看子类、抽象类的构造方法打印结果可知,实例化子类时先实例化父类。

在抽象类的构造方法中调用了自己未实现的抽象方法,那么对应实例化的子类实现了此方法,在抽象类实例化之后,子类未实例化之前,抽象类可以调用子类实现的抽象方法。

不同的类实例化打印不同的抽象方法实现,java多态的一种表现形式。

意见反馈 常见问题 官方微信 返回顶部