-1

I have the following base class and sub class:

public class BaseClass<T> {
    public BaseClass(T value){
}

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
    }
} 

I get the following error: Implicit super constructor BaseClass() is undefined. Must explicitly invoke another constructor

How do I go about fixing this?

4

2 回答 2

6

将您的子类构造函数更改为:

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在超类中提供显式构造函数来避免此问题,在这种情况下,您的原始子类代码可以正常工作。

于 2013-09-23T08:39:53.197 回答
1

如果它要求显式调用另一个构造函数,只需执行以下操作:

public class NewClass<T> extends BaseClass<T> {
    public NewClass(T value){
        super(value);
    }
} 
于 2013-09-23T08:41:38.223 回答