使用构造函数在java中进行多级继承

San*_*jay -7 java oop

你好伙计我只是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)

Mik*_*bel 5

看起来你基本上是在子类的构造函数中复制超类构造函数的行为.你不需要这样做.超类的构造函数已经为您初始化这些字段.你必须做的是从子类的构造函数中调用超类的构造函数.这必须是子类构造函数中的第一个语句.

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,yz各个领域.

澄清一下:每个构造函数都必须调用超类的构造函数.如果不明确地执行此操作,则编译器将自动插入对"default"(无参数)super()构造函数的调用(如果存在).如果您的超类没有默认构造函数,并且您没有显式调用超级构造函数,那么这是一个错误,您的代码将无法编译.这大概就是你的情况.