首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道面试题的思考

一道面试题的思考

作者头像
圣杰
发布2018-01-11 16:05:42
6600
发布2018-01-11 16:05:42
举报
文章被收录于专栏:圣杰的专栏圣杰的专栏

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

分析结果
分析结果
对象在内存中的结构
对象在内存中的结构
对象在内存中的结构分布
对象在内存中的结构分布

参考自:.NET面试题解析(04)-类型、方法与继承

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档