我是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;
}
}
答案 0 :(得分: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;
}
}
或在BoxSuper中定义一个无参数构造函数:
class BoxSuper
{
int height;
int length;
int width;
BoxSuper(){}
...
答案 1 :(得分: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;
}
}