Java构造器:级联调用,调用兄弟构造器

级联调用:

复制代码
class Father{
    Father(){
        System.out.println("Father birth");
    }
    public void announce(){
        System.out.println("Father");
    }
}
class Child extends Father{
    Child(){
        System.out.println("Child birth");
    }
    @Override
    public void announce(){
        System.out.println("Child");
    }
}
public class Hello {
    public static void main(String[] args){
        Child child=new Child();
    }
}
复制代码

上述代码的执行结果如下:

Father birth
Child birth

我们可以看到,先执行了父类的构造器,然后执行子类的构造器。因此我们可以理解级联调用。

级联调用指继承关系中子类构造器调用时会默认调用父类无参构造器作为子类构造器的第一句,除非子类构造器在第一句时显式的调用父类的其他构造器。

需要说明的是,子类构造器第一句以外位置不能对父类构造器进行调用。

 

调用兄弟构造器:

复制代码
class Test{
    Test(){
        System.out.println("Default initialize");
    }
    Test(int i){
        this();
        System.out.println("I have "+i+" as a parameter.");
    }
}
public class Hello {
    public static void main(String[] args){
        Test test=new Test(5);
    }
}
复制代码

上述代码中的this就是一个调用兄弟构造器的例子,此处和级联调用类似,必须把调用语句放置在构造器的第一行。执行结果如下:

Default initialize
I have 5 as a parameter.

Java严格的级联调用,兄弟调用顺序,保证了程序的易读性和规范性,并且方便了编译器对其进行实现。另外一旦使用了this()方法放置在第一行去调用兄弟构造器,则不再调用默认的无参父类构造器,而由调用的兄弟构造器去调用无参父类构造器,换言之,推迟了无参父类构造器的调用。

 

posted @   CieloSun  阅读(1299)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示