override 和 new
来源:互联网 发布:语文一对一网络辅导 编辑:程序博客网 时间:2024/06/05 20:08
先上代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OverrideAndNew{ class Program { static void Main(string[] args) { Cat cat = new Cat(); cat.Eat(); // calls Cat.Eat() cat.Go(); // calls Cat.Go() cat.catdonthave(); Animal animal_cat = (Animal)cat; animal_cat.Eat(); // calls Cat.Eat()! animal_cat.Go(); // calls Animal.Go()! Animal animal = new Animal(); animal_cat.Drink(); } } class Animal { // Methods public virtual void Drink() { Console.WriteLine("animal drink"); } public virtual void Eat() { Console.WriteLine("animal eat"); } public virtual void Go() { Console.WriteLine("animal go"); } public virtual void catdonthave() { Console.WriteLine("cat don't have"); } } class Cat : Animal { // Methods // warning: hides inherited drink(). Use new public void Drink() { Console.WriteLine("cat drink"); } // overrides inherited eat(). public override void Eat() { Console.WriteLine("cat eat"); } // hides inherited go(). public new void Go() { Console.WriteLine("cat go"); } }}
由上图可以看出 cat和animal的值和类型都是统一的,此时如果cat调用自身并不具有但是其父类含有的函数时(cat.catdonthave();
),则调用父类函数。如果其调用自身含有的函数时,则调用自身函数。而animal只能调用自己的函数。
但是animal_cat的值和类型并不一致,animal_cat的类型为animal。此时 animal_cat调用函数时首先会去查看它指定的值是否有override此函数,如果有则调用这个值对应的函数,如果没有则调用自身的函数。
如果无override的情况下,添加new的意思则为这个函数与基类毫无关系。所以animal_cat在调用drink和go的时候,由于其无override,所以只会调用自身。
0 0
- override和new使用指南
- new和override区别
- new 和 override比较
- new和override
- Virtual、override和new
- override 和 new
- new和override关键字
- C# new和override
- C# override和new区别
- override 和 new 的区别
- new和override的区别?
- new和override的区别
- override和new的区别
- new和override的区别
- new 和 override 的区别
- C# new关键字和override
- abstract、virtual、override 和 new
- C# new和override区别
- Java面向对象
- python两种方法实现从1000万个随机数中找出top n元素(附c语言版)
- Java之类的封装
- beego autorouter 使用遇到的问题
- biharm_solve_with_factor
- override 和 new
- 【C++11学习笔记】返回类型后置语法
- java怎么从控制台输入的几种方法
- CSharp知识点收集
- iOS 使用第三方库CocoaAsyncSocket进行Tcp通讯
- python --异常
- solution Of 1055. The World's Richest (25)
- win平台C语言共享内存通信
- 软件/互联网行业术语