「次のコードを想定します。
public class MultiplasHerancas
{
static GrandFather grandFather = new GrandFather();
static Father father = new Father();
static Child child = new Child();
public static void Test()
{
grandFather.WhoAreYou();
father.WhoAreYou();
child.WhoAreYou();
GrandFather anotherGrandFather = (GrandFather)child;
anotherGrandFather.WhoAreYou(); // Writes "I am a child"
}
}
public class GrandFather
{
public virtual void WhoAreYou()
{
Console.WriteLine("I am a GrandFather");
}
}
public class Father: GrandFather
{
public override void WhoAreYou()
{
Console.WriteLine("I am a Father");
}
}
public class Child : Father
{
public override void WhoAreYou()
{
Console.WriteLine("I am a Child");
}
}
「子供」オブジェクトから「私はおじいさんです」と出力したいです。
Child オブジェクトが「base.base」クラスでメソッドを実行するにはどうすればよいですか? ベースメソッドを実行できることはわかっていますが(「私は父です」と出力します)、「私は祖父です」と出力したいのです!これを行う方法があれば、OOP 設計で推奨されますか?
注:私はこの方法を使用していません/使用します。知識の継承を強化したいだけです。