是的,抽象类可以有构造函数。考虑到这一点: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具有允许调用方指定值的构造函数。
抽象构造函数将经常用于强制类约束或不变量,例如设置类所需的最小字段。注意:由于父抽象类中没有默认(或非Arg)构造函数,子类中使用的构造函数必须显式调用父构造函数。