隠蔽とオーバーライド
隠蔽とオーバーライドは
・スーパークラスとサブクラスで同名のメンバーを定義でき、サブクラスで挙動
を変更できる(処理を再定義できる)
という点は同じ。
だたし、ポリモーフィズムにおいて、以下の差がある。
・隠蔽の場合、静的な型と動的な型が異なる場合、静的な型のメンバが参照される
・オーバーライドの場合、静的な型と動的な型が異なる場合、動的な型のメンバが
参照される
=隠蔽の場合はポリモーフィズムが使用できない。
(*)
・静的な型:変数宣言時に指定された型
・動的な型:変数に代入されているデータの実際の型
ex)
class Program
{
static void Main(string[] args)
{
Money a = new Jpy();
a.Name(); /// Moneyですが表示される
a.VName(); /// JPYですが表示される
}
}
public class Money
{
public void Name(){Console.WriteLine("Moneyです。");}
public virtual void VName() { Console.WriteLine("Moneyです。"); }
}
public class Jpy:Money
{
public new void Name() { Console.WriteLine("JPYです。"); }
public override void VName() { Console.WriteLine("JPYです。"); }
}