我有以下基类和子类:
public class BaseClass<T> {
public BaseClass(T value){
}
public class NewClass<T> extends BaseClass<T> {
public NewClass(T value){
}
}
我收到以下错误:隐式超级构造函数BaseClass()未定义。必须显式调用另一个构造函数
我该如何解决这个问题?
答案 0 :(得分:6)
将子类cosntructor更改为:
public class NewClass<T> extends BaseClass<T> {
public NewClass(T value){
super(value);
}
}
如果你不添加super(value);
,那么编译器会自动添加一个super();
,它将链接到超类的0-arg
构造函数。基本上,您的原始子类构造函数被编译为:
public NewClass(T value){
super();
}
现在你可以看到,它试图调用编译器找不到的0-arg
超类构造函数。为什么?因为在超类中,你提供了一个1-arg
构造函数,编译器不会在那里添加任何默认构造函数。因此,这个错误。
您还可以通过在超类中提供明确的0-arg
构造函数来避免此问题,在这种情况下,您的原始子类代码将正常工作。
答案 1 :(得分:1)
如果要求显式调用另一个构造函数,只需执行:
public class NewClass<T> extends BaseClass<T> {
public NewClass(T value){
super(value);
}
}