以下のコード:
public class Program
{
static void Main(string[] args)
{
father f = new son(); Console.WriteLine(f.GetType());
f.show();
}
}
public class father
{
virtual public void show()
{
Console.WriteLine("father");
}
}
public class son : father
{
public override void show()
{
Console.WriteLine("son");
}
}
結果は「son」です。' 'を''
に変更すると、結果は'父'になります。public override void show()
public new void show()
だから私は以下の「ルール」を結論付けます:
- 'override'を使用します。この関数が呼び出されるのは、実行時に決定されます。プログラムは、現在のオブジェクトの実際のタイプに応じて適切な関数を選択します(上記のように、fの実行時タイプはsonであるため、sonのショーを呼び出します)。
- 'new'修飾子を使用すると、呼び出される関数はコンパイル時に決定されます。プログラムは、オブジェクトの宣言された型を選択してその関数を呼び出します(上記のように、fの宣言された型は父であるため、'new'修飾子を使用すると'father'を表示する出力。
上記のすべてが私がポリモーフィズムについて理解していることです。誤解や間違ったことはありますか?