加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

一道面试题的思考

发布时间:2020-12-15 21:22:39 所属栏目:asp.Net 来源:网络整理
导读:在继承中new和override相同点和区别?看下面的代码,有一个基类A,B1和B2都继承自A,并且使用不同的方式改变了父类方法Print()的行为。测试代码输出什么?为什么? public void DoTest(){ B1 b1 = new B1(); B2 b2 = new B2(); b1.Print(); b2.Print(); //

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

分析结果

对象在内存中的结构

对象在内存中的结构分布

参考自:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读