C#中类的继承 override virtual new的作用以及代码分析
继承中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的作用以及代码分析相关推荐
- 面向对象的三大特征,封装、继承、多态的个人理解以及代码分析
面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写, 不知道过程就找不到结果,找到实现过程就可以得到实现结果. 例如: 我们在外打工租房子,我们需要了解 ...
- (继承)virtual与访问控制
之前只注意过访问控制与继承的关系,这边不多说,今天看到代码看到virtual放在private里,并且还有派生类没有override public里的virtual,此时调用时啥情况了,这边有点晕,看 ...
- python类与继承person类_关于python中类的继承及self
关于python中类的继承及self 如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__i ...
- python类方法继承_对python中类的继承与方法重写介绍
1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...
- python3类的继承详解_python3中类的继承以及self和super的区别详解
python中类的继承: 子类继承父类,及子类拥有了父类的 属性 和 方法. python中类的初始化都是__init__().所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时 ...
- python中类的继承关系使用什么符号表示_智慧职教: Python中类的继承关系使用( )符号表示?...
智慧职教: Python中类的继承关系使用( )符号表示? 答:2, 芭娜娜频繁描写死亡的真正意图是什么?() 答:寻求走出死亡阴影,重获新生的途径 中国大学MOOC: 脂肪是对人体不好的营养素 答: ...
- java中的类的继承_再谈Java中类的继承
上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public classA {2 3 final ...
- python中类的继承规则
python中类的继承规则 在学习python中的继承规则之前,首先要知道python中类的划分. 只要继承object类的就是新式类,不继承object类的都是经典类. 在python3中,所有的类 ...
- 面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。...
声明:本文章是为一个朋友而写的,昨天朋友遇见了问题,今天自己思考后,发现问题的本质就是面向对象的3大特性,所以才有了本文-- 只要是有过学习高级编程语言的同学应该都知道面向对象这个思想(所谓的高级语言 ...
最新文章
- Python 实现九九乘法表
- 面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?
- leetcode 21 Merge Two Sorted Lists
- Web 趋势榜: 上周不可错过的最热门的 10 大 Web 项目 - 又增加了那么多的好项目啊 - 210611...
- 实验9 结构程序设计 7-4 查找书籍
- GitHub Pages搭建属于自己的静态网站,并绑定个人域名
- matplotlib基础函数函数 plot, figure
- 二叉树非递归后序遍历算法
- 修改oracle实例名orcl为demo
- 揭秘盒马鲜生,如何打破收益增长天花板!
- 分布式NoSQL数据库的Spring整合实践
- python批量查询IP物理地址输出到Exel
- 对付U盘病毒彻底免疫
- Tomcat9百度云下载
- 硬件测试必需的5个流程,每一个步骤都不能少!
- 吴洪声十问戴跃: 域名圈巴菲特是如何炼成的?
- Java生成条形码图片到本地
- linux 动态扫描 数码管,七段数码管动态扫描原理及其实现方法
- 计网——17差错检测和纠正技术
- 每天做不完的分析报表,什么时候才能熬出头?