1. ホーム
  2. c#

[解決済み] 抽象クラスはいつ使うか?

2023-07-22 14:51:30

質問

以下は、MSDN の記事です。 抽象クラス の記事ですが、本当に理解できません...。

抽象クラスはどのような場合に使うのでしょうか?抽象クラスを使用する利点は何ですか?

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

抽象クラスは、継承やポリモーフィズムのためにクラスが必要だが、クラス自体をインスタンス化する意味がなく、そのサブクラスのみをインスタンス化する場合に有用です。これらは、いくつかの共通の実装コードを共有するサブクラスのグループのテンプレートを定義したいが、スーパークラスのオブジェクトが作成できないことも保証したい場合によく使用されます。

例えば、Dog、Cat、Hamster、Fishのオブジェクトを作成する必要があるとします。色、大きさ、足の数、行動など似たような性質を持っているので、Animalのスーパークラスを作成します。しかし、Animalは何色なのか?Animalオブジェクトの足は何本でしょうか?この場合、Animal型のオブジェクトをインスタンス化することはあまり意味がなく、そのサブクラスのみをインスタンス化することになります。

抽象クラスにはポリモーフィズムという利点もあり、(抽象)スーパークラスの型をメソッドの引数や戻り値の型として使用することができます。例えば、PetOwnerクラスにtrain()メソッドがあった場合、Animalのサブタイプごとにメソッドを作成するのではなく、train(Animal a)のようにAnimalタイプのオブジェクトを取り込むように定義することが可能です。