隐式超级构造函数未定义

时间:2016-06-20 08:34:24

标签: java

我有一个基本的Java类,其定义如下。我有三个变量:l,b,h对应长度,宽度和高度。我基本上试图使用super关键字从子类访问超类的成员。

class dabbaweight extends dabba {
int w;

dabbaweight(int l, int b, int h, int w) {
    // super(l, b, h);
    super.l = l;
    super.b = b;
    super.h = h;
    this.w = w;
}

void dabbashow() {
        System.out.println("The variables are length:" + l + " breadth:" + b + " height:" + h + " weight:" + w + ".");
     }

} 

我有另一个扩展上述类的类。

public class Rando2 {
    public static void main(String[] args) {
        dabba mydabba1 = new dabba(1, 2, 3);
        dabbaweight mydabba2 = new dabbaweight(10, 20, 30, 100);
        mydabba1.dabbashow();
        mydabba2.dabbashow();
    }
}

我在一个单独的类中提供了main函数,如下所示。

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Implicit super constructor dabba() is undefined. Must explicitly invoke another constructor

at dabbaweight.<init>(Rando2.java:17)
at Rando2.main(Rando2.java:33)

它会产生以下错误。

/usr/bin/Rscript -e "rmarkdown::render('stats.Rmd', output_file = file.path('/tmp/stats.html'))"

这是什么错误?我怎样才能解决这个问题? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果超类没有默认构造函数(无参数构造函数),就像在 dabba 类中一样,相对派生类(子类)必须显式调用其中一个非默认构造函数,所以你必须删除 dabbaweight 类的构造函数的注释。

class dabbaweight extends dabba {
  int w;

  dabbaweight(int l, int b, int h, int w) {
    super(l, b, h);

    this.w = w;
}

  void dabbashow() {
    System.out.println("The variables are length:" + l + " breadth:" + b + " height:" + h + " weight:" + w + ".");
     }
}

答案 1 :(得分:0)

更改以下代码

   dabbaweight(int l, int b, int h, int w) {
       // super(l, b, h);
       super.l = l;
       super.b = b;
       super.h = h;
       this.w = w;
   }

喜欢下面给出的

    dabbaweight(int l, int b, int h, int w) {
       super(l, b, h);
       this.w = w;
    }