你好伙计我只是java语言的初学者.我的程序是java中的多级继承,使用构造函数.我在编译我的程序时面临一些错误.如果任何人在这里解决我的问题,我会感觉很好.
class bee
{
int x,y,z;
bee(int x1,int y1,int z1)
{
x=x1;
y=y1;
z=z1;
}
void vol()
{
int vol1=x*y*z;
System.out.println("Volume1="+vol1);
}
}
class be extends bee
{
be(int x2,int y2,int z2)
{
x=x2;
y=y2;
z=z2;
}
}
class inh3
{
public static void main(String args[])
{
be c=new be(10,20,30);
c.vol();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来你基本上是在子类的构造函数中复制超类构造函数的行为.你不需要这样做.超类的构造函数已经为您初始化这些字段.你必须做的是从子类的构造函数中调用超类的构造函数.这必须是子类构造函数中的第一个语句.
class bee {
int x, y, z;
bee(int x1, int y1, int z1) {
x = x1;
y = y1;
z = z1;
}
// ...other methods...
}
class be extends bee {
be(int x1, int y1, int z1) {
super(x1, y1, z1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当您创建一个new be(10, 20, 30),该be构造函数传递参数一起的bee构造函数,将用它们来初始化x,y和z各个领域.
澄清一下:每个构造函数都必须调用超类的构造函数.如果不明确地执行此操作,则编译器将自动插入对"default"(无参数)super()构造函数的调用(如果存在).如果您的超类没有默认构造函数,并且您没有显式调用超级构造函数,那么这是一个错误,您的代码将无法编译.这大概就是你的情况.