C#中重写(override)和覆盖(new)的区别
重写 override
用关键字 virtual
修饰的方法,叫虚方法。
可以在子类中用override
声明同名的方法,这叫“重写”。
相应的,没有用virtual
修饰的方法,我们叫它实方法。
重写会改变父类方法的功能。
覆盖 new
在子类中用 new
关键字修饰 定义的与父类中同名的方法,叫覆盖。
覆盖不会改变父类方法的功能。
代码示例
直接上代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp1
{class Program{public static void Main(string[] args){Dog d = new Dog(); //override 重写 会改变父类的功能Cat c = new Cat(); //new 覆盖 不会改变父类的功能d.Say();//调用override的方法c.Say();//调用new的方法Animal a;a = c; //a与c指向同一对象,但c是作为Cat类访问,而a是作为Animal类访问c.Say();//此时调用的子类cat中的方法a.Say();//此时调用的是父类animal中的方法a = d; //a与d都作为Dog类访问d.Say();//此时调用的是override的方法a.Say();//此时调用的是override的方法Animal d1 = new Dog();//当用子类创建父类的时候,override重写会改变父类的功能d1.Say();Animal c1 = new Cat();//当用子类创建父类的时候,new覆盖不会改变父类的功能c1.Say();}}public class Animal{public virtual void Say(){Console.WriteLine("Hello,Animal");}}public class Dog : Animal{public override void Say(){Console.WriteLine("Hello,Dog");}}public class Cat : Animal{public new void Say(){Console.WriteLine("Hello,Cat");}}
}
输出结果:
Hello,Dog
Hello,Cat
Hello,Cat
Hello,Animal
Hello,Dog
Hello,Dog
Hello,Dog
Hello,Animal
C#中重写(override)和覆盖(new)的区别相关推荐
- JAVA中重写和实现的区别_Java中重载和重写的区别
Java中重载和重写的区别 1.1重载是什么 Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型 1.2为什么用重载 重载 ...
- C#继承与多态 virtual虚方法的使用 在子类中使用override重写父类函数
本片文章讲的是多态 子类重写父类函数的方式如下:在父类函数使用virtual,在子类函数中使用override 注意定义变量的时候要使用new来创建,而不要使用类名 变量名的方式,否则在使用时会报错& ...
- overwrite java_java中的重写override或overwrite
java中的重写override或overwrite TestOverWrite.java ? class="java">class Person { private Str ...
- C++中的重载、覆盖、隐藏对比
1.重载.重写(覆盖).隐藏三者概念解释 重载(overload):同一个可访问区域内被声明的几个具有不同参数列(参数的类型.个数.顺序不同)的同名函数.根据参数列表,最终确定调用哪个函数,重载不关心 ...
- 谈谈C++继承中的重载,覆盖和隐藏
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的 ...
- C++中overload,override,overwrite的区别?
C++中overload,override,overwrite的区别? Overload(重载) Override(覆盖) Overwrite(重写) Overload(重载) 在C++程序中,可以将 ...
- 重写(override / overwrite)
方法的重写(override / overwrite) 1.重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作 2.应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同 ...
- php继承和重载区别,php继承中方法重载(覆盖)的应用场合
php继承中方法重载(覆盖)的应用场合 发布于 2015-02-23 17:57:23 | 91 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- 重载Overload 和重写Override区别
重载Overload 和重写Override区别 一.含义 二.代码 1.重载OverLoad 2.重写Override 一.含义 重载OverLoad:表示同一个类中的可以有多个方法名称相同的方法, ...
最新文章
- python字典转dataframe_python DataFrame转dict字典过程详解
- php1045无法登录mysql_phpstudy安装完成后打开phpmyadmin提示#1045 无法登录 MySQL 服务器...
- 火狐翻译插件_阅读外文必备,浏览器实用的翻译插件推荐
- selenium 自动化web测试
- C语言项目2:图书管理系统
- php读取西门子plc_第三方设备如何读取PLC数据
- php ip 转,用php进行ip/子网到IP 地址范围的转换
- 输出流缓冲的意义 何时缓冲 Stdout Buffering
- linux自动切换网,linux使用shell自动切换网关
- SQL技巧——行转列/列转行
- Duilib学习笔记(一)—— 环境搭建
- 【博弈论】取棋子游戏
- video 标签 autoplay 实现自动播放
- 计算机科学概论第三版重点,计算机科学概论重点.doc
- qrcode 生成二维码不显示图片解决办法
- 计算机机型分pc机和什么,三种等分的电脑打印纸一般指什么尺寸
- aws api gateway 使用阿里云的域名访问
- 当前计算机硬盘容量的计量单位是GB,当前计算机硬盘容量的计量单位是GB,它相当于________字节...
- 什么!FPS难道不是越高越好吗?
- 安装Windows操作系统纯净版