MSDNの記事はこちら抽象クラス、でも本当に分からないんです…
抽象クラスはいつ使用すべきでしょうか? 抽象クラスを使用する利点は何ですか?
ベストアンサー1
抽象クラスは、継承とポリモーフィズムのためにクラスが必要な場合に便利ですが、クラス自体をインスタンス化しても意味がなく、そのサブクラスのみをインスタンス化する必要があります。抽象クラスは、共通の実装コードを共有するサブクラスのグループのテンプレートを定義したいが、スーパークラスのオブジェクトを作成できないようにしたい場合によく使用されます。
たとえば、Dog、Cat、Hamster、Fish オブジェクトを作成する必要があるとします。これらのオブジェクトは、色、サイズ、脚の数、動作などの類似したプロパティを持っているため、Animal スーパークラスを作成します。ただし、Animal の色は何色でしょうか。Animal オブジェクトには脚がいくつありますか。この場合、Animal 型のオブジェクトをインスタンス化することはあまり意味がなく、そのサブクラスのみをインスタンス化します。
抽象クラスにはポリモーフィズムという利点もあります。つまり、(抽象) スーパークラスの型をメソッドの引数または戻り値の型として使用できるのです。たとえば、train() メソッドを持つ PetOwner クラスがある場合、Animal のすべてのサブタイプに対してメソッドを作成するのではなく、train(Animal a) のように Animal 型のオブジェクトを受け取るように定義できます。