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

时间:2014-05-20 18:14:32

标签: java oop

大家好我是java语言的初学者。我的程序是java中的多级继承,使用构造函数。我在编译程序时遇到了一些错误。如果有人在这里解决我的问题,我会感觉很棒。 / p>

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

1 个答案:

答案 0 :(得分: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);
    }
}

现在,当您创建new be(10, 20, 30)时,be构造函数会将参数传递给bee构造函数,后者将使用它们初始化x,{ {1}}和y字段。

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