• 覆盖父类方法的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覆盖的方法是随实例调用的。

    转载请注明出处。


  • 相关阅读:
    以JPanel为基础实现一个图像框
    扩展JButton实现自己的图片按钮
    箴言录2014年4月22日
    搜集整理一些Cron表达式例子
    长途旅行感悟
    箴言录2014年4月19日
    Linux下显示硬盘空间的两个命令
    Linux命令复习和练习_02
    Dash:程序员的的好帮手
    Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604881.html
Copyright © 2020-2023  润新知