在继承中new和override相同点和区别?看下面的代码,有一个基类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程序员的基础知识。看似简单的继承,重载和覆写,却大有玄机。
它不仅涉及到对象的创建,也涉及到对象在内存的分配,更要求面试者对对象在内存中的结构分布有深刻的认识。