やりたいこと
継承したときのメソッドにつける修飾子にnewとoverrideがあるけど、その違いについてまとめてみる。
現状わかっていることだけ.
準備
猫クラスと猫王クラスを準備する。まずは修飾子をつけない。
class Cat
{
public void Cry()
{
Console.WriteLine("にゃお~");
}
}
class CatKing : Cat
{
public void Cry()
{
Console.WriteLine("にゃお~猫王だぞ~");
}
}
そうすると警告はでるが、コンパイルは通る。警告はnewを使用してください。というような内容。
newの場合
基底クラスの型に代入すると、基底クラスのメソッドが呼び出される。
class Program
{
static void Main(string[] args)
{
Cat tama = new CatKing();
tama.Cry();
Console.ReadLine();
}
}
class CatKing : Cat
{
public new void Cry()
{
Console.WriteLine("にゃお~猫王だぞ~");
}
}
class Cat
{
public void Cry()
{
Console.WriteLine("にゃお~");
}
}
結果は「にやお~」になる。
overrideの場合
基底クラスの型に代入しても、派生クラスのメソッドが呼び出される。
class Program
{
static void Main(string[] args)
{
Cat tama = new CatKing();
tama.Cry();
Console.ReadLine();
}
}
class CatKing : Cat
{
public override void Cry()
{
Console.WriteLine("にゃお~猫王だぞ~");
}
}
class Cat
{
public virtual void Cry()
{
Console.WriteLine("にゃお~");
}
}
結果は「にゃお~猫王だぞ~」になる。
0 件のコメント:
コメントを投稿