1 Java 的继承机制和构造方法调用规则
在Java中,当一个类去继承另一个类时,子类的构造方法必须调用父类的构造方法,以确保父类的成员变量和资源能够正确初始化。这是因为父类的构造方法负责初始化父类的成员变量,子类构造方法负责初始化子类的成员变量。
- 如果类里面没有写构造函数,编译器会自动生产一个无参构造函数,如果类里面显示地写了构造函数,编译器就不会自动生成构造函数。
- 如果子类构造函数没有显示调用父类的构造函数,Java 编译器会在子类构造方法的第一行插入super(),即调用父类的构造方法。
- 如果父类没有无参构造方法,那么子类必须显示地调用父类的构造方法,否则编译器就会报错。
下面用代码举例说明:
下面这段代码可以正常运行
class Father {
int f1;
// 编译器自动生成无参构造函数
}
class Son extends Father {
int s1;
public Son(int s1) {
// 编译器会插入 supper(),隐士调用父类无参构造函数
this.s1 = s1;
}
}
下面这段代码在编译阶段会报错:
class Father {
int f1;
public Father(int f1) {
this.f1 = f1;
}
}
class Son extends Father {
int s1;
public Son(int s1) {
this.s1 = s1;
}
}
因为子类没有显示地调用父类的构造函数
89

被折叠的 条评论
为什么被折叠?



