Javainheritance错误:隐式超级构造函数未定义

我是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; } } 

您收到此错误,因为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; } } 

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

 class BoxSuper { int height; int length; int width; BoxSuper(){} ... 

构造函数总是始终调用超级构造函数。 如果没有对超级构造函数进行显式调用,则编译器会尝试将其设置为调用默认的无参数构造函数。 如果不存在默认的无参数构造函数,则会显示您看到的编译错误,编译将失败。

在你的情况下,解决方案是显式调用相应的超级构造函数作为你的Box的构造函数的第一行,如果你考虑它,这也很有意义,因为你想用a,b和c初始化super,就像写的那样在它的构造函数中:

 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; } }