两个基类C E 都override重写了父类的虚方法
class A
{
public string str = "A";
public void Show()
{
Debug.LogError("我是A");
}
}
class B:A
{
public new string str = "B";
public new virtual void Show()
{
Debug.LogError("我是B");
}
}
class C:B
{
public override void Show()
{
Debug.LogError("我是C");
}
}
class D:C
{
public new string str = "D";
public new void Show()
{
Debug.LogError("我是D");
}
}
class E : B
{
public override void Show()
{
Debug.LogError("我是E");
}
}
B b = new D();
b.Show();
调用的时候调哪一个重写?有什么优先级还是什么?
多态绕的太晕了 有什么学习方式
调用C的Show
b是B类对象,调用Show时由于Show是虚函数,会激发多态,C类的Show是重载函数,D类的不是,所以会调用C的Show
override 本质上叫“偷梁换柱”,马桶台喜欢弄啥猜谜传话的节目,谁中间换词了,最后就是谁的词对吧
所以这个没有优先级,往上看谁近,谁换的词。
new 本质是上指鹿为马,到我这里鹿就是马。但换人了鹿还是鹿
所以你的问题:显示C
因为D指鹿为马说是D,但是B b = new D(); 换人了。换人了就往上找最后一个偷换内容的人,最后一个偷换内容的是C,所以最后内容是C
A b = new D();
b.Show();
所以基于这个原则,我们说现在显示A,因为B指鹿为马,后面都是在马上偷梁换柱。现在换到A类型。A就不会认从B开始歪楼的词了