抽象クラスの正確な使用法は何ですか?抽象クラスであるため、通常のクラスで同じことを行うことはできませんか?
4 に答える
抽象クラスを使用して具体的な実装を提供しますが、インスタンス化は許可しません。単独では意味をなさない通常のクラスをいつでもインスタンス化できます。同時に、すべての実装クラスで同一の具体的な実装がある場合、インターフェイスだけでは不十分な場合があります。抽象クラスで十分です。
- インターフェイス: コントラクトのみ、実装なし、インスタンス化なし
- 抽象クラス: コントラクト、一部の実装、インスタンス化なし
- クラス: コントラクト、実装、インスタンス化
抽象クラスは、サブクラスに継承させたい基本機能がある場合に使用されますが、基本クラスをインスタンス化することは意味がありません。たとえば、Shape基本クラスのようなものがある場合、サブクラスで使用できる組み込みの実装と、サブクラスに実装させたいインターフェイスメソッドを含めることができます。ただし、Shapeオブジェクトを作成することはおそらく意味がありません。抽象クラスはこの機能を提供します。抽象クラスの使用のもう1つの優れた例は、抽象ファクトリパターンです。
通常のクラスでは、すべてのメソッドの実装を提供する必要があります。インターフェイスでは、すべてのメソッドに実装を提供する
必要はありません。
抽象クラスは、実装を含むメソッドを持つことも、実装を提供しないが実装を提供する継承クラスを必要とするメソッドを持つこともできる唯一のタイプのクラスです。
実装なしでメソッドを追加できるという事実が、抽象クラスをインスタンス化できない理由です。すべてのメソッドの実装を持つものだけをインスタンス化できます。
通常のクラスとは異なり、abstract
クラスにはメソッドを含めることができますabstract
。これらはインターフェイス メンバーのように機能します。
その間、通常のクラスができることはほぼすべてできます。メソッドを実装したり、フィールドとネストされた型を含めたり、別のクラスから派生したりできます。