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类的咯。

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

  • 相关阅读:
    Pytorch笔记
    Anaconda使用
    最大流最小割算法
    pycallgraph--使用pycallgraph绘制Python函数调用关系图
    论文表格--三线表
    0514数据结构--递归、排序和查找
    0511操作系统
    0510操作系统
    ACWING算法提高课-动态规划
    删括号
  • 原文地址:https://www.cnblogs.com/pfcan66/p/2689043.html
Copyright © 2011-2022 走看看