抽象クラスはコンストラクターを持つことができますか?
抽象クラスは確かにコンストラクターを持つことができます。一般的な考えに反して、この機能により強力なクラス設計と制約の強制が可能になります。
抽象クラスでのコンストラクターの使用
次の抽象クラスの例を考えてみましょう:
abstract class Product { int multiplyBy; public Product(int multiplyBy) { this.multiplyBy = multiplyBy; } public int mutiply(int val) { return multiplyBy * val; } }
この例では、抽象クラス Product に multiplyBy フィールドを初期化するコンストラクターがあります。 Product を拡張する具象クラスは、このコンストラクターを利用して、クラスの不変条件を強制したり、フィールドの初期化を制限したりできます。
具象クラス コンストラクター
Product から継承する具象クラスは、親コンストラクターを明示的に呼び出す必要があります。抽象クラスにはデフォルトのコンストラクターがないためです。以下にいくつかの例を示します。
class TimesTwo extends Product { public TimesTwo() { super(2); } } class TimesWhat extends Product { public TimesWhat(int what) { super(what); } }
具象クラス TimesTwo は multiplyBy 値を 2 にハードコーディングしますが、TimesWhat では呼び出し元が値を指定できるようにします。
抽象クラス コンストラクターの利点
抽象クラス コンストラクターはいくつかを提供します利点:
注: 明示的なコンストラクター抽象コンストラクターにはデフォルトの実装がないため、サブクラスでは呼び出しが必要です。
以上が抽象クラスにはコンストラクターを含めることができますか?また、その利点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。