zoukankan      html  css  js  c++  java
  • override和new的区别【摘】

    override

    1. override是派生类用来重写基类中方法的;

    2. override不能重写非虚方法和静态方法;

    3. override只能重写用virtual、abstract、override修饰的方法;

    4. 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

    new

    1. new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;

    2. 如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字;

    3. 派生类可以隐藏基类中的虚方法,也可以隐藏基类中的普通方法。

    4. 如果在派生类中用private来修饰new 方法,那么只在该派生类中隐藏了基类中的方法,在该派生类之外,相当于没有隐藏基类中的方法;

    5. 如果在派生类中隐藏了基类中的方法,在该派生类的派生类中,将延续对该派生类对基类方法的隐藏。

    代码示例

    namespace Test
    {
        public class A
        {
            public virtual void Myvirtual()
            {
                Console.WriteLine(DateTime.Now);
            }
    
            public virtual void New_Myvirtual()
            {
                Console.WriteLine(DateTime.Now);
            }
        }
    
        class B : A
        {
            public new void Myvirtual()
            {
                Console.WriteLine("The Time Is:" + DateTime.Now);
            }
    
            public override void New_Myvirtual()
            {
                Console.WriteLine("NEW_The Time Is:" + DateTime.Now);
            }
        }
    
        class Test
        {
            public static void Main()
            {
                B b = new B();
                b.Myvirtual();
                b.New_Myvirtual();
    
                Console.WriteLine();
    
                A c = (A)b;
                c.Myvirtual();     //调用基类的方法
                c.New_Myvirtual();//调用b的实例方法
            }
        }
    }
    
    //输出结果
    //The Time Is:2014/7/26 10:58:39
    //NEW_The Time Is:2014/7/26 10:58:39
    
    //2014/7/26 10:58:39
    //NEW_The Time Is:2014/7/26 10:58:39
    View Code

    由此得出结论:
    1.派生类中用new实现基类的同名方法,把派生类强制转换为基类型时,将调用基类中的实现;
    2.相反,派生类中用override 实现基类的virtual 同名方法,把派生类强制转换为基类型时,仍将调用派生类自己的实现。

    摘自 小鱼1982 ,星辉

    The Wipphj ,Hello 光
  • 相关阅读:
    2019.08.26 学习整理
    day28
    python-day25(正式学习)
    自闭的一天
    python-day18(正式学习)
    python-day17(正式学习)
    python-day16(正式学习)
    别点进来!!!
    python-day15(正式学习)
    python-day14(正式学习)
  • 原文地址:https://www.cnblogs.com/wipphj/p/3869774.html
Copyright © 2011-2022 走看看