【问题标题】:Multilevel inheritance in java by using constructor [closed]java中使用构造函数的多级继承[关闭]
【发布时间】:2014-07-09 03:27:40
【问题描述】:

大家好,我只是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();
    }
}

【问题讨论】:

  • 我不知道你在问什么或问题是什么。
  • 您遇到什么错误?这里有什么问题?
  • 通过将代码复制到 IDE 中,我立即发现了问题所在。但是这个问题的真正问题是你应该在你的帖子中包含编译器错误消息。否则其他人会搁置这个问题。
  • 我面临错误“找不到符号作为构造函数 bee()

标签: java oop


【解决方案1】:

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

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 构造函数,后者将使用它们来初始化 xyz 字段.

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

【讨论】:

  • 有时,一个糟糕的问题得到了一个当之无愧的好答案。现在就是其中之一。
  • @Mike Strobel-非常感谢先生的回复。
  • 类是扩展蜜蜂,不是吗?
  • 是的..一定是输入错误。
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2017-04-05
  • 2013-03-21
相关资源
最近更新 更多