Java抽象类及子类实例化顺序和方法调用顺序测试
2023-09-27 14:28:50 时间
测试目的
- 验证抽象类及子类实例化顺序;
- 验证抽象类是否可以在子类未实例化时调用子类实现的抽象方法;
- 验证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多态的一种表现形式。
相关文章
- Java移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>
- Java throw与throws
- 写了一首 Java 表白诗,女朋友不愁了!
- Java对象实例化过程
- java_GC
- 学Java必读!学不好Java的原因
- Java HashMap实例源码分析
- Java设计模式(13)——结构型模式之桥梁模式(Bridge)
- Java设计模式之十一种行为型模式(附实例和详解)
- java中使用Protobuf的实例(Demo)
- Java泛型详解:<T>和Class<T>的使用。泛型类,泛型方法的详细使用实例
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- JAVA 静态方法和实例方法的区别 (图表)
- PHP调用JAVA的WebService简单实例
- 使用java的方式配置Spring(@Component、@Configuration、@Bean)
- java-优化-代码中的优化(1)
- Java入门系列:实例讲解ArrayList用法
- Java多线程(十三) Java创建线程池,参数详解
- Android 自己的自动化测试(2)依据ID查找对象(java)
- java NIO socket 通信实例
- 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )
- Java正则表达式提取字符的方法实例
- idea创建java目录和resource目录
- Java经典实例:使用DateFormatter来格式化日期时间
- Java子类实例化的过程
- web3j java版本生成公钥、私钥、地址等实例
- 【Java基础系列】创建一个类的实例有哪些方法