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

简介: 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

结果分析

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

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

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


目录
相关文章
|
10天前
|
算法 Java Linux
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
这篇文章介绍了如何使用Java的Graphics2D类在图片上合成另一个照片,并将照片切割成圆形头像的方法。
21 1
java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
|
4天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
12 1
|
8天前
|
Java 编译器
Java“返回类型为 void 的方法不能返回一个值”解决
在 Java 中,如果一个方法的返回类型被声明为 void,那么该方法不应该包含返回值的语句。如果尝试从这样的方法中返回一个值,编译器将报错。解决办法是移除返回值语句或更改方法的返回类型。
|
8天前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
17 2
|
8天前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
14 1
|
8天前
|
Java
让星星⭐月亮告诉你,Java synchronized(*.class) synchronized 方法 synchronized(this)分析
本文通过Java代码示例,介绍了`synchronized`关键字在类和实例方法上的使用。总结了三种情况:1) 类级别的锁,多个实例对象在同一时刻只能有一个获取锁;2) 实例方法级别的锁,多个实例对象可以同时执行;3) 同一实例对象的多个线程,同一时刻只能有一个线程执行同步方法。
9 1
|
13天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
19 5
|
9天前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
25 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
9天前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
22 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
10天前
|
存储 算法 Java
java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
这篇文章是关于如何在Java中使用Graphics2D的RenderingHints方法来提高海报制作的图像质量和文字清晰度,包括抗锯齿和解决文字不清晰问题的技术详解。
17 0
java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题