土台だけを用意する「抽象クラス(Abstract Class)」とは?
C#では、共通の構造や機能は持たせたいけれど、詳細は子クラスで定義したいというときに、抽象クラス(abstract class)を使います。
通常のクラスと違い、インスタンス化はできず、継承専用として使われます。
抽象クラスの特徴
- abstract修飾子を使って定義する
- インスタンス化はできない
- 抽象メソッドを含めることができる(中身なしのメソッド)
- 共通処理(フィールド・プロパティ・メソッド)を定義して子クラスに継承させられる
基本構文
public abstract class クラス名 {
public abstract void メソッド名(); // 抽象メソッド
}
例:Animalクラス
public abstract class Animal {
public string Name { get; set; }
public abstract void Speak(); // 抽象メソッド(中身なし)
public void Eat() {
Console.WriteLine("食べる");
}
}
子クラス:Dog
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("ワンワン!");
}
}
使い方
Animal a = new Dog(); // 抽象クラス型で扱う(多態性)
a.Speak(); // → ワンワン!
a.Eat(); // → 食べる
abstractとvirtualの違い
項目 |
abstract |
virtual |
定義 |
中身なし(必ずオーバーライド) |
中身あり(オーバーライドは任意) |
使用できるクラス |
abstractクラス |
通常のクラスもOK |
抽象クラスとインターフェースの違い
- 抽象クラス:共通処理を持てる、フィールドや実装ありのメソッドも書ける
- インターフェース:すべて実装なし(C#8以降は一部例外あり)
まとめ
抽象クラス(abstract class)は、共通の性質だけを定義し、詳細な処理は子クラスに任せるためのクラスです。
インスタンス化はできませんが、共通のメンバーやルールを子クラスに継承させることで、柔軟かつ統一的な設計が可能になります。
abstract
や override
の使い方とあわせて覚えると効果的です!