繁体   English   中英

构造函数继承

[英]Constructor inheritance

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);
}

我该如何实现?

你不能 构造函数不是继承的。 在父类上仅自动调用默认的一个,但仍不会“继承”。

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

而且,如果一个类没有显式定义构造函数,则编译器将提供一个默认的空构造函数,如前所述,它调用了super()默认构造函数。

这就是为什么“看起来”默认构造函数为“继承”的原因,但这只是一个编译器技巧。

根据Java语言规范的第8.8节:构造函数声明

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM