首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java错误:未定义隐式超级构造函数。必须显式调用另一个构造函数

Java错误:未定义隐式超级构造函数。必须显式调用另一个构造函数
EN

Stack Overflow用户
提问于 2014-08-09 02:03:53
回答 3查看 14.5K关注 0票数 2

我在一个外部jar中有一个BaseClass,它有一个将实现类(JerseyClientImpl)设置为jerseyClient的构造函数。

代码语言:javascript
运行
复制
public BaseClass(AuthDetails auth, String ID) {
    setListID(D);
    this.jerseyClient = new JerseyClientImpl(auth);
}

我正在扩展BaseClass以将我自己的实现类设置为jerseyClient,但是我得到了前面提到的错误。更改BaseClass以添加默认构造函数不在我的控制范围内,正如我所说的,它是一个外部jar.Can,您建议我如何克服这个错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-09 02:06:11

因为BaseClass有一个非默认构造函数,所以它没有自动生成的无参数默认constructor。

因此,您的子类不能依赖默认构造函数(因为它不能调用基类的不存在的默认构造函数),因此您的子类必须有一个调用基类的构造函数的显式构造函数。

或者是具有相同参数的构造函数:

代码语言:javascript
运行
复制
public SubClass(AuthDetails auth, String ID) {
    super(auth,ID);
    ...
}

或者不带参数的构造函数为基类的构造函数提供默认值:

代码语言:javascript
运行
复制
public SubClass() {
    super(null,"something");
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-09 02:06:25

在Java中,如果没有显式地提供对超类构造函数的调用作为构造函数中的第一个语句,那么它将插入对默认超类构造函数的隐式调用。如果没有默认的超类构造函数,那么就会出现前面提到的错误。

JLS, Section 8.8.7声明:

如果构造函数主体不是以显式构造函数调用开始的,并且被声明的构造函数不是原始类对象的一部分,则构造函数主体隐式地以超类构造函数调用“

();”开始,超类构造函数调用是不带参数的直接超类的构造函数的调用。

您必须显式调用超类构造函数,传递所有参数,如下所示:

代码语言:javascript
运行
复制
public JerseyClientImpl(AuthDetails auth, String ID) {
    super(auth, ID);

    // Rest of constructor code
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-23 02:34:52

首先,如果你在class...the中写一些参数化的构造函数,那么这个类的参数构造函数就不再存在了。

而且,当你试图创建它的子类的构造器时,父类的无参数构造器总是被称为first.If它不存在,你得到编译器错误。

因此,在父类中定义no arg构造函数,或者在子类构造函数中使用一些值调用父类的参数化构造函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25209586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档