0

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

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类在这两种情况下都没有一个空白构造函数吗?如果是这样,为什么它不起作用?

提前致谢

4

1 回答 1

6

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

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

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

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

于 2013-01-06T23:39:31.543 回答