在繼承中new和override相同點和區(qū)別凸郑?看下面的代碼驹暑,有一個基類A玫恳,B1和B2都繼承自A,并且使用不同的方式改變了父類方法Print()的行為优俘。測試代碼輸出什么京办?為什么?
public void DoTest()
{
B1 b1 = new B1(); B2 b2 = new B2();
b1.Print(); b2.Print(); //按預期應該輸出 B1帆焕、B2
A ab1 = new B1(); A ab2 = new B2();
ab1.Print(); ab2.Print(); //這里應該輸出什么呢惭婿?
}
public class A
{
public virtual void Print() { Console.WriteLine("A"); }
}
public class B1 : A
{
public override void Print() { Console.WriteLine("B1"); }
}
public class B2 : A
{
public new void Print() { Console.WriteLine("B2"); }
}
不得不承認,這道題很考驗.net程序員的基礎知識叶雹〔萍ⅲ看似簡單的繼承,重載和覆寫折晦,卻大有玄機钥星。
它不僅涉及到對象的創(chuàng)建,也涉及到對象在內存的分配满着,更要求面試者對對象在內存中的結構分布有深刻的認識谦炒。
分析結果
對象在內存中的結構
對象在內存中的結構分布