親クラスのメソッドを上書きする「オーバーライド(Override)」とは?
C#では、継承を使って親クラスの機能を子クラスに引き継ぐことができます。
そして、親クラスのメソッドを子クラスで上書きして、独自の振る舞いに変えることを オーバーライド(Override) といいます。
オーバーライドの基本構文
親クラスでメソッドに virtual
をつけ、子クラスで override
を使って上書きします。
public class Animal {
public virtual void Speak() {
Console.WriteLine("動物が鳴く");
}
}
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("ワンワン!");
}
}
使い方の例
Animal a = new Dog();
a.Speak(); // → ワンワン!
親クラスの型(Animal)で扱っていても、実際のインスタンス(Dog)に応じて適切なメソッドが呼ばれます。これが多態性(ポリモーフィズム)です。
オーバーライドのポイント
virtual
:親クラスでオーバーライドできることを示す
override
:子クラスで上書きしていることを明示する
- メソッドの名前・引数・戻り値の型はすべて一致している必要がある
baseキーワードで親クラスの処理も実行
オーバーライドされたメソッドの中で base.メソッド名()
を使うと、親クラスの処理も呼び出すことができます。
public override void Speak() {
base.Speak(); // 親クラスのSpeakも実行
Console.WriteLine("…でもワンワンとも鳴くよ!");
}
オーバーロードとの違い
項目 |
オーバーライド |
オーバーロード |
意味 |
親クラスのメソッドを上書き |
同じ名前のメソッドを引数違いで複数定義 |
キーワード |
virtual / override |
なし |
継承が必要? |
必要 |
不要 |
まとめ
オーバーライド(Override)は、親クラスのメソッドを子クラスで再定義して、振る舞いをカスタマイズするための仕組みです。
virtual
とoverride
を使いこなすことで、多態性を活かした柔軟なクラス設計が可能になります。