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);
}
我怎样才能做到这一点?
答案 0 :(得分:8)
你不能。构造函数不是继承的。只有默认的一个会在超类上自动调用,但仍然不会继承"。
编译器会自动添加对默认构造函数的调用" super()"在每个构造函数中,除非显式调用构造函数,并且提供超类具有默认构造函数。
此外,如果classe没有明确定义构造函数,编译器将提供一个默认的空值,如前所述调用super()默认构造函数。
这就是为什么它看起来像"默认构造函数是"继承",但它只是一个编译器技巧。
答案 1 :(得分:3)
来自Java Language Specification, section 8.8: Constructor declarations:
构造函数声明不是成员。它们永远不会被继承,因此不会被隐藏或覆盖。
答案 2 :(得分:2)
你不能。由于构造函数不能在子类中继承。如果我们不在类中编写任何构造函数,则提供默认构造函数。通过使用super关键字,我们可以调用父类构造函数,但有一个条件,即它是子构造函数中的第一个语句。
答案 3 :(得分:1)
你不能。构造函数不在类之间继承,并且每个子类构造函数都必须将超类构造函数作为其第一个操作(显式或隐式)。