一道面试题

上周面试两场,两家企业都有类型的这道题,只不过一个用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值