当前位置:  开发笔记 > 编程语言 > 正文

为什么总是调用超类构造函数

如何解决《为什么总是调用超类构造函数》经验,为你挑选了2个好方法。

我有以下2个班级

public class classA {
    classA() {
        System.out.println("A");
    }
}

class classB extends classA {
    classB() {
        System.out.println("B");
    }
}

然后跑

1
classA c = new classB();

要么

2
classB c = new classB(); 

总是给

A
B

为什么会这样?乍一看,在任何一种情况下,我都会假设只classB调用构造函数,因此唯一的输出就是

B

但这显然是错误的.



1> Aniket Thaku..:

这就是Java的工作原理.在调用Object子类的构造函数之前,调用父类的构造函数,一直到类层次结构.

引用文档:

使用super(),调用超类无参数构造函数.使用super(parameter list),调用具有匹配参数列表的超类构造函数.

注意:如果构造函数未显式调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用.如果超类没有无参数构造函数,则会出现编译时错误.Object确实有这样的构造函数,所以如果Object是唯一的超类,则没有问题.

如果子类构造函数显式或隐式地调用其超类的构造函数,您可能会认为将调用一整个构造函数链,一直回到构造函数Object.事实上,情况就是这样.它被称为构造函数链接,当需要很长的类下降时,您需要注意它.



2> Alex Suo..:

在构造过程中总是调用超类构造函数,并且保证在调用子类构造函数之前完成超类构造.对于大多数(如果不是全部)面向对象语言来说就是这种情况.如果您不想调用默认构造函数,可以使用参数显式调用超类构造函数; 否则这样的调用由编译器自动完成.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有