Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java A从B继承,B从C继承。初始化C的构造函数会调用吗?_Java_Oop_Constructor - Fatal编程技术网

Java A从B继承,B从C继承。初始化C的构造函数会调用吗?

Java A从B继承,B从C继承。初始化C的构造函数会调用吗?,java,oop,constructor,Java,Oop,Constructor,当我准备一个关于OOP的采访时,我遇到了这个问题 A继承表格B。B继承C。 初始化C的构造函数会调用吗 我所知道的是,一个构建的模型不是继承的。我们必须使用super关键字来引用父级的构造函数。我说得对吗?子类的构造函数将首先调用其超类的构造函数。如果一个类有多个祖先,这些调用将被叠加,直到调用顶级祖先的构造函数为止。然后,它将继续执行下一个祖先的构造函数,直到执行所有祖先的构造函数。从这里可以推断,每次创建对象时,都会调用对象类的构造函数,始终 请注意,如果不在子类构造函数中添加对super(

当我准备一个关于OOP的采访时,我遇到了这个问题

A继承表格B。B继承C。 初始化C的构造函数会调用吗


我所知道的是,一个构建的模型不是继承的。我们必须使用super关键字来引用父级的构造函数。我说得对吗?

子类的构造函数将首先调用其超类的构造函数。如果一个类有多个祖先,这些调用将被叠加,直到调用顶级祖先的构造函数为止。然后,它将继续执行下一个祖先的构造函数,直到执行所有祖先的构造函数。从这里可以推断,每次创建对象时,都会调用
对象
类的构造函数,始终

请注意,如果不在子类构造函数中添加对
super()
的调用,编译器将自动为您添加该调用。如果超类没有默认构造函数,并且您没有在子类的构造函数中指定对超类的特定构造函数的调用,那么您将得到一个编译器错误


所有这些规则都在中说明。

在Java世界中,当您扩展另一个类时,您只会看到直接超类的构造函数。超类应该适当地封装超类构造函数。

始终会隐式调用基类的构造函数。在您的例子中,将首先调用
C
的构造函数,然后调用
B
的构造函数,最后调用
A
的构造函数


当您定义了重载构造函数,并且想要调用一个特定的构造函数时,使用
super
非常有用。

如果您自己不这样做,总会有一个隐式的
super()
调用。@Boristespider改写了第一句话,以便更好地了解这种行为。