1. ホーム
  2. java

[解決済み] 抽象クラスはコンストラクタを持つことができますか?

2022-03-14 11:06:48

質問

抽象クラスはコンストラクタを持つことができますか?

その場合、どのように、どのような目的で使用することができますか?

どのように解決するのですか?

はい、抽象クラスはコンストラクタを持つことができます。これを考えてみましょう。

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 には、呼び出し側が値を指定できるコンストラクタがあります。

抽象コンストラクタは、クラスの設定に必要な最小限のフィールドなど、クラスの制約や不変性を強制するために頻繁に使用されます。

<ブロッククオート

注:親コンストラクタにはデフォルトの(あるいは引数のない)コンストラクタは存在しないので 抽象クラスでは、サブクラスで使用されるコンストラクタは明示的に 親コンストラクタ