如何理解Java中基类子对象的构建过程从"基类向外"进行扩散的?
《Java编程思想》复用类一章,提出基类的子对象的构建过程是从基类“向外”进行扩散的。
下面通过实例进行讲解,首先看下面的代码:
import static net.mindview.util.Print.*; //《java编程思想》提供的类库
/**
* @author Administrator
*
*/
public class Cat extends Animal {
public Cat() {
// TODO Auto-generated constructor stub
print("Caretoon constructor");
}
public static void main(String[] args) {
Cat x = new Cat();
}
}
class Biology {
Biology() {
// TODO Auto-generated constructor stub
print("Art constructor");
}
}
class Animal extends Biology {
Animal() {
// TODO Auto-generated constructor stub
print("Drawing constructor");
}
}
程序运行结果:

在这里共声明了三个类,分别是Biology, Animal,Cat. 继承关系如下:

在main()函数中,经过单步调试可以看到,创建Cat类型对象时候,首先需要找到Cat类的父类对象,即从Cat类寻找其父类Animal类的构造器,最后寻找Animal的父类Biology类的构造器。
找到Biology基类之后,按照下面顺序,执行各自的构造函数

所以,最终的输出结果,如控制台输出所示。
需要注意的是,即使Cat类不创建构造器,编译器会创建默认的构造器。仍然会调用到基类的构造器。输出结果如下:

总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
相关文章
Spring的自定义扩展标签NamespaceHandler解析
这篇文章主要介绍了Spring的自定义扩展标签NamespaceHandler解析,在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,Spring提供了可扩展Schema的支持,这是一个不错的折中方案,需要的朋友可以参考下2023-12-12
在 Spring Boot 中使用 Quartz 调度作业的示例详解
这篇文章主要介绍了在 Spring Boot 中使用 Quartz 调度作业的示例详解,在本文中,我们将看看如何使用Quartz框架来调度任务,Quartz支持在特定时间运行作业、重复作业执行、将作业存储在数据库中以及Spring集成,需要的朋友可以参考下2022-07-07
Java在Map转Json字符串时出现"\"转义字符的解决办法
当一个Map被转成Json字符串后,被添加到另一个Map中,会出现被加上“\”转义字符的情况,这个时候该如何解决呢,下面就来和小编一起了解一下2023-07-07
Spring Boot整合Zookeeper实现分布式锁的场景分析
这篇文章主要介绍了Spring Boot整合Zookeeper实现分布式锁,zk实现分布式锁完全是依靠zk节点类型当中的临时序号节点来实现的,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2022-06-06
spring boot使用WebClient调用HTTP服务代码示例
这篇文章主要介绍了spring boot使用WebClient调用HTTP服务代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-12-12


最新评论