Lin*_*Jin 5 java inheritance constructor
我想做以下事情:
class P {
P(int a) {
// construct
}
}
class C extends P {
}
// in main
int a = 2;
C foo = new C(a); // can I do this?
Run Code Online (Sandbox Code Playgroud)
我想通过调用父类P的构造函数来创建子对象C,而无需在类C中编写任何构造函数,如"super(a)".那可能吗?
我的想法是我有很多类,比如"C类",它需要与"class P"相同的构造函数.因此,每次创建新的类似类时,我都不希望编写构造函数方法.
谢谢
构造函数不被继承。您需要声明一个C
带有参数的构造函数。它将需要调用适当的超类构造函数(如果您不希望调用默认的超类构造函数)。
您可以避免声明的唯一构造函数是默认的无参数构造函数,并且仅当您未声明任何构造函数时才可以。这是因为如果您没有声明构造函数,编译器将为您生成一个。除非您显式调用超类构造函数,否则编译器始终插入对默认超类构造函数的调用。
另请注意,如果您没有显式调用超类构造函数并且超类中没有默认构造函数,您将收到编译时错误。
编辑:如果您有“很多类,例如 C 类”,那么编写大量构造函数的替代方法是使用工厂方法模式。您可以让所有类实现默认构造函数,并提供init()
采用一组标准参数的单独方法。工厂方法将接受一个Class<? extends C>
对象和一些初始化参数,生成一个新实例(使用默认构造函数),并init
使用初始化参数调用其方法。这样,您只需要重写init
那些需要特殊处理的子类的方法(始终记住调用 to super.init
)。