博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一道面试题
阅读量:6738 次
发布时间:2019-06-25

本文共 887 字,大约阅读时间需要 2 分钟。

上周面试两场,两家企业都有类型的这道题,只不过一个用override一个用new ,看了<<你必须知道的.net>>里面有这个问题的解释,记录下来备忘。

第一家公司

public abstract class A    {        public A()        {            Console.WriteLine("A");        }        public virtual void Say()        {            Console.WriteLine("ASay");        }            }    public class B : A    {        public B()        {            Console.WriteLine("B");        }        public override void Say()        {            Console.WriteLine("BSay");        }    }

执行  A a = new B

       a.Say(); 问返回什么,答案是 A  B  BSay

这个简单,书上的解释  关注对象原则:调用子类还是父类的方法取决于创建的对象是子类对象还是父类对象,这里B的Say方法用Override覆写了父类方法,自然返回BSay

第二家公司用new 替换了 override,答案就应该是 A  B  ASay,为什么呢?使用New隐藏基类的实现,其实就是创建了与父类同名的另一个方法,因为是另一个方法,而a是A的引用类型,所以就调用了A的方法。要想调用B的方法,只能B b = new B(); 

有两个原则在<<你必须知道的.net>>中描述的

1、关注对象原则

2、执行就近原则,对于同名的字段或方法,编译器是按照顺序来查找引用,首先访问离它近的字段或方法

 

转载于:https://www.cnblogs.com/dengkun/archive/2013/05/26/override.html

你可能感兴趣的文章
python核心编程:学习笔记3--迭代器,列表解析
查看>>
linux 默认目录介绍
查看>>
网站建设应遵循用户需求胜于一切
查看>>
Archivelog和Noarcivelog
查看>>
8月第一周全球各国家域名总量统计:美国持续领先
查看>>
IDC评述网:《2013年度香港域名注册总量报告》
查看>>
Python进程缓存
查看>>
基于PCDN技术的无延时直播方案
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
javascript string 转unicode unicode 转string
查看>>
opencv ubuntu golang
查看>>
From Apprentice To Artisan 翻译 20
查看>>
我的友情链接
查看>>
Nagios和Centreon的安装部署
查看>>
shel脚本--监控网卡
查看>>
集中管理服务器 PUPPET(一) 部署 与 添加节点
查看>>
rhca 333 network
查看>>
Android 好推荐
查看>>
CentOS系统安装(下):kickstart文件及引导镜像的制作
查看>>
System Center 2012 R2实例3—SCOM之SharePoint全方位监视3—报告服务器
查看>>