为什么这段代码不能编译?

时间:2013-01-06 23:38:37

标签: java inheritance constructor

我试图理解为什么这段代码会编译:

public class A {
}

public class B extends A {
  public B() {
  }
}

虽然这段代码没有:

public class A {
  public A(int n) {
  }
}

public class B extends A {
  public B() {
  }
}

我的意思是,在这两种情况下A类都没有空白构造函数吗?如果是这样,为什么它不起作用?

提前致谢

1 个答案:

答案 0 :(得分:6)

当超类只有带args的构造函数时,你需要从你的子类显式调用你的超类的构造函数,如下所示。

public B() {
    super(2);// passing an int value to your super class cons
}
  

在这两种情况下A类都没有空白构造函数吗?

没有。如果声明构造函数,那么编译器将不包含默认构造函数,因此在{2}中class A没有默认的no-args构造函数,并且必须从子类构造函数显式地进行超级调用