##オーバーライドとは?
オブジェクト指向におけるオブジェクトの継承の話で出てくる用語のひとつであり、
親クラスにあるメソッドを子クラスで再定義することによって、子クラス上で親クラスのメソッドを上書きすることです。
わかりずらいと思うので、例を挙げて考えていきましょう。
##家族を用いた例
母、兄、弟の3つのクラスを用意します。
そして、母クラスを親クラス、兄クラスと弟クラスを子クラスとします。
子クラスの兄クラスと弟クラスは、親クラスの母クラスを継承して生成されました。
母クラスに「食事」というメソッドがあったとします。
そのメソッドには「何でも食べる」と書いてあったので、それを受け継いだ兄と弟も「食事」が実行されると何でも食べます。
ある日、兄はyoutubeで食用として養殖された牛が残虐に殺害される映像を見たことをきっかけにヴィーガンに転生してしまいました!
ヴィーガンになった兄は野菜しか食べることができなくなったので、兄の「食事」メソッドを書き換えます。
書き換え方は、兄クラスに母クラスのメソッドと同様の名前である「食事」メソッドを作成し、そのメソッドに「野菜だけ食べる」というように記述します。
そして、「食事」を実行すると母と弟は今まで通りなんでまたべますが、兄は野菜しか食べなくなります。
このように、親クラスから受け継がれたメソッドを子クラスで書き換えることをオーバーライドといいます!
##コードを書いてみる
上で挙げた例に従ってコードを書いてみます。使う言語はc#です。
//親クラスの母を作る
class MAMA
{
public virtual void syokuji()
{
return "なんでも食べる";
}
}
//子クラスの兄を作る
class ANI : MAMA
{
//母のsyokujiメソッドをオーバーライド
public override void syokuji()
{
return "野菜だけ食べる";
}
}
//子クラスの弟を作る
class OTOUTO : MAMA
{
}
class OverriseTest
{
static void main()
{
MAMA mam = new MAMA();
ANI ani = new ANI();
OTOUTO oto = new OTOUTO();
//母の結果
Console.WriteLine(mam.syokuji());
//兄の結果
Console.WriteLine(ani.syokuji());
//弟の結果
Console.WriteLine(oto.syokuji());
}
}
このように書きます。実行結果は次のようになります。
何でも食べる
野菜だけ食べる
何でも食べる
c#でオーバーライドをするには、親クラスのメソッドに「virtual」、子クラスのメソッドに「override」と記述する必要があります。
今回のコードだとMAMAクラスのsyokujiメソッドに「virtual」、ANIクラスのsyokujiメソッドに「ovarride」を付けました。
##まとめ
もう疲れたのでこの辺にしときます。
バイト頑張る。以上