抽象クラスにコンストラクターを持たせることはできますか?
もしそうなら、それはどのように、どのような目的で使用できますか?
ベストアンサー1
はい、抽象クラスにはコンストラクターを含めることができます。次の点を考慮してください。
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
呼び出し元が値を指定できるようにするコンストラクタがあります。
抽象コンストラクターは、クラスのセットアップに必要な最小フィールドなどのクラス制約または不変条件を強制するために頻繁に使用されます。
注意: 親抽象クラスにはデフォルト (または引数なし) のコンストラクターがないため、サブクラスで使用されるコンストラクターは親コンストラクターを明示的に呼び出す必要があります。