オーバーライド(override)とは?
オーバーライドとは、
「親クラスのメソッドを子クラスで上書きする」ことです。
C#では、継承したクラスの動きを部分的に変えたいときに使います。
class Animal
{
public virtual void Speak()
{
Console.WriteLine("動物が鳴く");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("ワンワン!");
}
}
上の例では、Animal クラスが「動物が鳴く」という基本の動作を定義しています。
でも、犬は「動物が鳴く」ではなく「ワンワン!」と鳴きますよね?
そのため、子クラス Dog で override を使って、Speak() の動作を上書きしています。
virtualとoverrideはセット
- 親クラスのメソッドには virtual が必要
- 子クラスで上書きするときに override を使う
class Animal
{
public virtual void Speak() { ... } // オーバーライドできるようにする
}
class Dog : Animal
{
public override void Speak() { ... } // 実際に上書きする
}
virtual がないメソッドは、そもそも上書きできません。
つまり、オーバーライド可能にするかどうかは、親クラスが決めるわけです。
overrideの実行例
Animal a = new Animal();
a.Speak(); // 出力: 動物が鳴く
Animal d = new Dog();
d.Speak(); // 出力: ワンワン!
変数の型はどちらも Animal なのに、
実際の中身が Dog のときは「ワンワン!」と出力されます。
まとめ
| 用語 | 意味 |
|---|---|
| virtual | オーバーライド可能にする(親クラス側) |
| override | オーバーライドする(子クラス側) |
オーバーライドを使うと、継承したクラスごとに動作を変えられるようになります。