在java中实例化子类时,会自动调用父类构造函数
当我在main中实例化类C时,它会自动调用B父类的构造函数。这是正常的还是我做错了什么?没有什么错,有对超级构造函数的隐式调用 您还没有为C类编写任何构造函数,所以默认构造函数将由编译器提供,编译器将提供在java中实例化子类时,会自动调用父类构造函数,java,Java,当我在main中实例化类C时,它会自动调用B父类的构造函数。这是正常的还是我做错了什么?没有什么错,有对超级构造函数的隐式调用 您还没有为C类编写任何构造函数,所以默认构造函数将由编译器提供,编译器将提供 abstract class A { abstract void method(); } class B extends A { B() { } void method() { } } class C extends B { C() {
abstract class A {
abstract void method();
}
class B extends A {
B() {
}
void method() {
}
}
class C extends B {
C() {
}
}
如果提供了默认构造函数,则会调用super。
在您的例子中,C扩展了B,因此调用了B的构造函数
如果您不使用任何其他类创建一个类,那么默认情况下它也会扩展对象类。因此将调用对象类构造函数 java中每个构造函数的第一行调用超级构造函数,这就是java的工作方式。 你应该读一读 如果构造函数主体不是以显式构造函数开头 调用和声明的构造函数不是 原始类对象,则构造函数体隐式开始 使用超类构造函数调用super;,援引 不带参数的直接超类的构造函数
当您实例化一个C时,会有C、B、a和Object的构造函数调用。C必须能够表现为任何直接或间接超类,并且具有所有超类的字段。类X构造函数的任务是使被初始化的对象能够作为X类构造函数工作
如果没有声明的构造函数,编译器将创建一个无参数构造函数,因此每个类都至少有一个构造函数。如果不是对象构造函数的构造函数没有以this或super构造函数调用开头,编译器将其视为以super;,对立即超类的无参数构造函数的调用 只有在不调用重载的情况下,才可以调用此函数。+1用于解释构造函数链接。@PaulBellora这是构造函数重载。链接发生在继承树上,要么是Prasad解释过的隐式链接,要么是使用super显式链接,super也可能重载。
C(){
super();
}