抽象クラスとは
抽象クラスは、共通の状態や処理を派生クラスへ提供するための基底クラスです。abstractを付けて宣言し、抽象クラスそのものをnewでインスタンス化することはできません。
抽象メソッド
using System;
abstract class Shape
{
public abstract double GetArea();
public void ShowArea()
{
Console.WriteLine(GetArea());
}
}
class Rectangle : Shape
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public override double GetArea()
{
return width * height;
}
}
class Program
{
static void Main()
{
Shape shape = new Rectangle(4, 5);
shape.ShowArea();
}
}
ShapeはGetAreaの具体的な計算方法を決めず、派生クラスに実装を要求します。一方、ShowAreaのように共通化できる処理は通常のメソッドとして実装できます。
抽象クラスとインターフェース
抽象クラスは共通の状態や実装を持つ「土台」に向いています。インターフェースは、異なるクラスに共通の操作を提供する契約を定義するのに向いています。クラスは一つのクラスだけを継承できますが、複数のインターフェースを実装できます。
どちらを選ぶかは、共通の状態・実装を共有したいのか、共通の操作だけを約束したいのかで判断します。