Ошибка наследования Java: неявный супер-конструктор не определен - PullRequest
3 голосов
/ 04 февраля 2012

Я новичок в 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;
    }
}

Ответы [ 2 ]

11 голосов
/ 04 февраля 2012

Вы получаете эту ошибку, потому что BoxSuper не имеет конструктора без аргументов.Во время вашего вызова конструктора в 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;
    }
}

или определите конструктор без аргументов в BoxSuper:

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

    BoxSuper(){}
...
7 голосов
/ 04 февраля 2012

Конструктор всегда вызывает супер-конструктор, всегда . Если явный вызов супер-конструктора не сделан, то компилятор пытается установить его так, чтобы он вызывал конструктор по умолчанию без параметров. Если конструктор по умолчанию без параметров не существует, отображается ошибка компиляции, и компиляция завершится неудачей.

Решение в вашем случае заключается в явном вызове соответствующего супер-конструктора в качестве первой строки конструктора вашего 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...