构造函数继承

时间:2014-09-02 18:18:59

标签: java

public A {

  public A(String arg0) {
  ...
  }

  public A(String arg0, String arg1) {
  ...
  }

}

public B extends A {

}

我希望B能够自动拥有从A继承的构造函数,而不必像以下那样明确地实现它们:

public B(String arg0) {
    super(arg0);
}
public B(String arg0, String arg1) {
    super(arg0, arg1);
}

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:8)

你不能。构造函数不是继承的。只有默认的一个会在超类上自动调用,但仍然不会继承"。

编译器会自动添加对默认构造函数的调用" super()"在每个构造函数中,除非显式调用构造函数,并且提供超类具有默认构造函数。

此外,如果classe没有明确定义构造函数,编译器将提供一个默认的空值,如前所述调用super()默认构造函数。

这就是为什么它看起来像"默认构造函数是"继承",但它只是一个编译器技巧。

答案 1 :(得分:3)

来自Java Language Specification, section 8.8: Constructor declarations

  

构造函数声明不是成员。它们永远不会被继承,因此不会被隐藏或覆盖。

答案 2 :(得分:2)

你不能。由于构造函数不能在子类中继承。如果我们不在类中编写任何构造函数,则提供默认构造函数。通过使用super关键字,我们可以调用父类构造函数,但有一个条件,即它是子构造函数中的第一个语句。

答案 3 :(得分:1)

你不能。构造函数不在类之间继承,并且每个子类构造函数都必须将超类构造函数作为其第一个操作(显式或隐式)。