是的,抽象类可以具有构造函数。考虑一下:
abstract class Product {
int multiplyBy;
public Product( int multiplyBy ) {
this.multiplyBy = multiplyBy;
}
public int mutiply(int val) {
return multiplyBy * val;
}
}
class TimesTwo extends Product {
public TimesTwo() {
super(2);
}
}
class TimesWhat extends Product {
public TimesWhat(int what) {
super(what);
}
}
超类Product
是抽象的,并且具有构造函数。具体类TimesTwo
有一个构造函数,仅仅在硬编码值 2 的具体类TimesWhat
有一个构造函数允许调用方指定的值。
抽象构造函数将经常用于强制执行类约束或不变量,例如设置类所需的最小字段。
注意:由于父抽象类中没有默认(或无参数)构造函数,因此在子类中使用的构造函数必须显式调用父构造函数。
如果您处于以下情况之一,则可以在抽象类中定义一个构造函数:
注意:
无论如何,请不要忘记,如果您未定义构造函数,则编译器会自动为您生成一个(此构造函数是公共的,没有参数,并且不执行任何操作)。
是的,它可以具有构造函数,并且已定义并且其行为与其他任何类的构造函数一样。除了不能直接实例化抽象类,只能对其进行扩展,因此,其使用总是来自子类的构造函数。