Вопрос:

Ошибка наследования Java: неявный супер-конструктор не определен

java inheritance constructor

18716 просмотра

2 ответа

8001 Репутация автора

Я новичок в Java и просто изучаю концепции ООП. Пожалуйста, ознакомьтесь с моим кодом. Я получаю следующую ошибку. Неявный Super Constructor не определен.

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;
    }
}
Автор: Teja Источник Размещён: 04.02.2012 06:31

Ответы (2)


7 плюса

266399 Репутация автора

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

Решение в вашем случае заключается в явном вызове соответствующего супер-конструктора в качестве первой строки конструктора вашего Box, и это также имеет смысл, если вы подумаете об этом, поскольку вы хотите инициализировать super с помощью 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;
    }
}
Автор: Hovercraft Full Of Eels Размещён: 04.02.2012 06:49

11 плюса

9813 Репутация автора

Решение

Вы получаете эту ошибку, потому что 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(){}
...
Автор: John Ericksen Размещён: 04.02.2012 06:51
Вопросы из категории :
32x32