Java继承错误:隐式超级构造函数未定义。

3

我是Java的新手,正在学习面向对象编程概念。请审核我的代码。我遇到了以下错误-隐式超级构造函数未定义。

class BoxSuper
{
    int height;
    int length;
    int width;

    BoxSuper(BoxSuper obj)
    {
        height=obj.height;
        length=obj.length;
        width=obj.width;
    }
    BoxSuper(int a,int b,int c)
    {
        height=a;
        length=b;
        width=c;
    }
    BoxSuper(int val)
    {
        height=length=width=val;
    }
    int volume()
    {
        return height*length*width;
    }
}

class BoxSub extends BoxSuper
{
    int weight;
    BoxSub(int a,int b,int c,int d)
    {
        height=a;
        length=b;
        width=c;
        weight=d;
    }
}

请注意,在编辑时,还有一个Markdown FAQ / 编辑帮助,可以通过橙色的 ? 访问。 - stakx - no longer contributing
我尝试了帮助,但它不允许我添加代码。 - Teja
看起来我陷入了错误的循环中... 代码非常简短... 但不知道为什么它不允许我发布代码。 我点击编辑按钮,复制我的代码,然后选择我的代码并按Ctrl-K键。之后,当我点击提交按钮时,它不允许我发布代码。 - Teja
1
大家好,我终于添加了代码。我的主函数导致编辑代码时出现问题。 - Teja
1
可能是重复的问题:Java错误:默认构造函数的隐式超类构造函数未定义 - Narendra Pathai
显示剩余5条评论
2个回答

11

你之所以会收到这个错误,是因为BoxSuper没有无参构造函数。在BoxSub的构造函数调用期间,如果你没有定义super构造函数调用,Java会尝试自动调用无参super()构造函数。

要解决这个问题,你可以在BoxSuper中定义一个super构造函数的调用,例如:

class BoxSub extends BoxSuper
{
    int weight;
    BoxSub(int a,int b,int c,int d)
    {
        super(a, b, c);
        weight=d;
    }
}

或者在BoxSuper中定义一个无参构造函数:

class BoxSuper
{
    int height;
    int length;
    int width;

    BoxSuper(){}
...

1
如果我是你,我会使用super(a,b,c)调用并利用你已经定义的BoxSuper构造函数。祝你学习顺利。 - John Ericksen

7
一个构造函数总是调用它的超类构造函数,总是。如果没有显式调用超类构造函数,编译器会尝试设置为调用默认的无参构造函数。如果不存在默认的无参构造函数,则会显示编译错误并且编译将失败。
在您的情况下,解决方案是在Box的构造函数中作为第一行明确调用适当的超类构造函数,这也是非常合理的,因为您希望使用其构造函数中写入的a、b和c来初始化超类。
class BoxSub extends BoxSuper
{
    int weight;
    BoxSub(int a,int b,int c,int d)
    {
        super(a, b, c);
        // height=a;
        // length=b;
        // width=c;
        weight=d;
    }
}

尝试了这个...它不起作用...但是我的问题是,子类在我的代码中继承了超类的所有变量和方法。为什么它仍然会抛出未定义的构造函数? - Teja
1
@Venk:嗯,“它不起作用”并没有告诉我们太多信息。你仍然有一个错误,需要向我们展示你更新后的代码尝试以及任何出现的错误消息。 - Hovercraft Full Of Eels
@Venk,你说它不工作是什么意思?你看到了什么错误? - mre
默认构造函数不可见的相同错误 - Nida Sahar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接