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

Tej*_*eja 3 java inheritance constructor

我是Java的新手,只是学习OOP概念.请查看我的代码.我收到以下错误.- 隐式超级构造函数未定义.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*sen 11

您收到此错误,因为BoxSuper没有no-arg构造函数.在BoxSub中构造函数调用期间,如果没有定义超级构造函数,则调用Java尝试自动调用no-arg super()构造函数.

在BoxSuper中定义一个超级构造函数调用,如下所示:

class BoxSub extends BoxSuper
{
    int weight;
    BoxSub(int a,int b,int c,int d)
    {
        super(a, b, c);
        weight=d;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

    BoxSuper(){}
...
Run Code Online (Sandbox Code Playgroud)


Hov*_*els 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;
    }
}
Run Code Online (Sandbox Code Playgroud)