zoukankan      html  css  js  c++  java
  • override与new的区别

    下面以一下例子为例,想一下,输出的结果将会是什么:

    View Code
     1 class A
     2     {
     3         public virtual void F()
     4         {
     5             Console.WriteLine("A.F");
     6         }
     7 
     8         public virtual void E()
     9         {
    10             Console.WriteLine("A.E");
    11         }
    12     }
    13 
    14 class B : A
    15     {
    16         public override void F()
    17         {
    18             Console.WriteLine("B.F");
    19         }
    20 
    21         public new void E()
    22         {
    23             Console.WriteLine("B.E");
    24         }
    25     }
    26 
    27 static void Main(string[] args)
    28         {
    29             B a = new B();
    30             A b = a;
    31             b.F();
    32 
    33             b.E();
    34             a.E();
    35             Console.Read();
    36         }

    你心中的答案是否正确,来看下面。

    b.F();之所以调用的是B类的,是因为现在的‘F’方只有B类重写方法,被重写以后就只有这一个了。

    b.E();之所以调用的是A类的,是因为NEW只起到了隐藏的作用,当A对象调用'E'方法时,肯定得先到A类去找,一找,额有,就调用此方法了,哪管派生类了。

    a.E();a是属于B类对象,肯定调用B类的咯。

    这是我的个人理解,如有哪说的不对,欢迎拍砖!我也是菜鸟呀!

  • 相关阅读:
    [Luogu]小Z的AK计划
    [POI2006]OKR-Periods of Words
    [NOI2014]动物园
    [NOI2009]管道取珠
    [IOI2005]河流
    [国家集训队]Crash的文明世界
    [HDU5382]GCD?LCM!
    [AGC027E]ABBreviate
    [CF]Round510
    [NOIp2005]篝火晚会
  • 原文地址:https://www.cnblogs.com/pfcan66/p/2689043.html
Copyright © 2011-2022 走看看