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)
构造函数总是调用超级构造,始终.如果没有对超级构造函数进行显式调用,则编译器会尝试将其设置为调用默认的无参数构造函数.如果不存在默认的无参数构造函数,则会显示您看到的编译错误,编译将失败.
你的情况的解决方案是明确地调用相应的超级构造函数的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)