继承中override virtual new的作用

  virtual     父类中需要注明允许重写的方法;  override    子类中必须显示声明该方法是重写的父类中的方法;  new         子类中忽略父类的已存在的方法,“重写该方法“;     C#中不支持隐式重写子类的方法

  即如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法(new),而不能覆盖(override);

代码分析

这是一个base类A有很多子类:
 1 class A
 2 {
 3     public virtual void Movie()
 4     {
 5         Console.WriteLine("MikiMouse");
 6     }
 7 }
 8
 9 class B : A
10 {
11     public override void Movie()
12     {
13         Console.WriteLine("DisneyMovie");
14     }
15 }
16
17 class C : B
18 {
19     public new virtual void Movie()
20     {
21         Console.WriteLine("Snow White");
22     }
23 }
24
25 class D : C
26 {
27     public override void Movie()
28     {
29         Console.WriteLine("Seven Dwarfs");
30     }
31 }

主函数其实也是一个静态(static)的入口函数:
 1 static void Main(string[] args)
 2 {
 3             A objA = new D();
 4             A objB = new B();
 5             C objC = new D();
 6             A objD = new A();
 7             objA.Movie();
 8             objB.Movie();
 9             objC.Movie();
10             objD.Movie();
11 }

其中:

A objA = new D();
objA.Movie();

这样用A定义的objA分配的是子类D的空间;

调用Movie()时先看A中的Movie()是虚函数(virtual),所以看A的下一级B,B被override修饰;

所以B中的Movie()覆盖A的函数,所以输出的应该是B中的DisneyMovie;

同理最终输出如下:

转载于:https://www.cnblogs.com/Elson8080/p/4378947.html

C#中类的继承 override virtual new的作用以及代码分析相关推荐

  1. 面向对象的三大特征,封装、继承、多态的个人理解以及代码分析

    面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写, 不知道过程就找不到结果,找到实现过程就可以得到实现结果. 例如: 我们在外打工租房子,我们需要了解 ...

  2. (继承)virtual与访问控制

    之前只注意过访问控制与继承的关系,这边不多说,今天看到代码看到virtual放在private里,并且还有派生类没有override public里的virtual,此时调用时啥情况了,这边有点晕,看 ...

  3. python类与继承person类_关于python中类的继承及self

    关于python中类的继承及self 如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__i ...

  4. python类方法继承_对python中类的继承与方法重写介绍

    1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...

  5. python3类的继承详解_python3中类的继承以及self和super的区别详解

    python中类的继承: 子类继承父类,及子类拥有了父类的 属性 和 方法. python中类的初始化都是__init__().所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时 ...

  6. python中类的继承关系使用什么符号表示_智慧职教: Python中类的继承关系使用( )符号表示?...

    智慧职教: Python中类的继承关系使用( )符号表示? 答:2, 芭娜娜频繁描写死亡的真正意图是什么?() 答:寻求走出死亡阴影,重获新生的途径 中国大学MOOC: 脂肪是对人体不好的营养素 答: ...

  7. java中的类的继承_再谈Java中类的继承

    上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public classA {2 3 final ...

  8. python中类的继承规则

    python中类的继承规则 在学习python中的继承规则之前,首先要知道python中类的划分. 只要继承object类的就是新式类,不继承object类的都是经典类. 在python3中,所有的类 ...

  9. 面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。...

    声明:本文章是为一个朋友而写的,昨天朋友遇见了问题,今天自己思考后,发现问题的本质就是面向对象的3大特性,所以才有了本文-- 只要是有过学习高级编程语言的同学应该都知道面向对象这个思想(所谓的高级语言 ...

最新文章

  1. Python 实现九九乘法表
  2. 面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?
  3. leetcode 21 Merge Two Sorted Lists
  4. Web 趋势榜: 上周不可错过的最热门的 10 大 Web 项目 - 又增加了那么多的好项目啊 - 210611...
  5. 实验9 结构程序设计 7-4 查找书籍
  6. GitHub Pages搭建属于自己的静态网站,并绑定个人域名
  7. matplotlib基础函数函数 plot, figure
  8. 二叉树非递归后序遍历算法
  9. 修改oracle实例名orcl为demo
  10. 揭秘盒马鲜生,如何打破收益增长天花板!
  11. 分布式NoSQL数据库的Spring整合实践
  12. python批量查询IP物理地址输出到Exel
  13. 对付U盘病毒彻底免疫
  14. Tomcat9百度云下载
  15. 硬件测试必需的5个流程,每一个步骤都不能少!
  16. 吴洪声十问戴跃: 域名圈巴菲特是如何炼成的?
  17. Java生成条形码图片到本地
  18. linux 动态扫描 数码管,七段数码管动态扫描原理及其实现方法
  19. 计网——17差错检测和纠正技术
  20. 每天做不完的分析报表,什么时候才能熬出头?

热门文章

  1. 2021-2027年中国涂装行业市场需求预测与投资战略规划分析报告
  2. Go 学习笔记(68)— goroutine 并发控制神器 Context
  3. 写好 Python 代码的几条原则
  4. LeetCode简单题之两个数组的交集 II
  5. 自动驾驶公司尴尬处境
  6. 端到端TVM编译器(上)
  7. 稀疏自编码器及TensorFlow实现
  8. ARM系列处理器和架构
  9. 2021年大数据Spark(十六):Spark Core的RDD算子练习
  10. Python:爬虫框架Scrapy的安装与基本使用