为什么在这种情况下编译失败?
这是怎么回事?:Employee
调用default constructor of Person
的构造函数,仅此而已。
由于您的超类构造函数没有定义无参数默认构造函数,因此您应该从子类构造函数显式调用超类的 1-args 构造函数。因此答案是第 18 行的D编译错误
要修复代码:
public Employee(String id){
super("pass person name");
//rest of the code
}
我想你可能会假设 Person 有一个默认的构造函数。如果没有声明的构造函数,编译器只会插入一个默认构造函数。如果你想让 Person 有一个无参数的构造函数,你需要声明一个。
在构造 Employee 时,需要在 Person 中调用构造函数。默认情况下,编译器将调用默认构造函数(不带参数),但在这种情况下,Person 中不存在它(编译器仅在不存在其他构造函数时才创建默认构造函数)。
您必须在 Employee 构造函数的第一行调用 Person 的具体构造函数,或者在 Person 中定义一个默认构造函数。