覆盖父类方法的new和override关键字

new和override都可以覆盖父类的方法,但两者又有所区别。

子类使用new覆盖父类方法后,是独立于父类的方法。

子类使用override覆盖父类的方法后,只是在调用时不再调用父类方法而调用子类方法。

我们来看一段代码

   public class Parent
    {
        public void T1()
        {
            Debug.WriteLine("Parent T1");
        }

        public virtual void T2()
        {
            Debug.WriteLine("Parent T2");
        }
    }

    public class Child : Parent
    {
        public new void T1()
        {
            Debug.WriteLine("Child T1");
        }

        public override void T2()
        {
            Debug.WriteLine("Child T2");
        }
    }
代码中定义了父类Parent和子类Child,方法T1使用new来覆盖,方法T2使用override来覆盖,下面是调用代码

  var c = new Child();
            c.T1();
            c.T2();

            var p = c as Parent;
            p.T1();
            p.T2();
执行结果如下图


可以看到,创建的Child实例,在执行T1和T2方法时,都执行的是Child中的方法。但是将该实例转换成父类时,T1执行的是Parent的T1方法,而T2执行的依旧是Child中的T2方法。这就说明,随着其类型的不同,用new关键字覆盖的方法执行其所在类的方法,而override覆盖的方法,不论是Child还是Parent,只要原始的实例是什么类型,就执行原始类型的方法。

所以new关键字覆盖的方法是独立存在的,override覆盖的方法是随实例调用的。

转载请注明出处。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值