C# 重写(override)和覆盖(new)
重写
重写会改变父类方法的功能。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp4
{
public class GetTheName
{
public virtual string ReWrite_Get() // 实现重写的虚方法
{
return "父类";
} public string Cover_Get() // 实现覆盖实方法
{
return "父类";
}
} public class Rewrite : GetTheName // 继承父类的重写子类
{
public override string ReWrite_Get()
{
return "父类被改变";
}
} public class Cover : GetTheName // 继承父类的覆盖子类
{
public new string Cover_Get()
{
return "父类被改变";
}
} class Program
{
static void Main(string[] args)
{
GetTheName getTheName = new GetTheName(); // 对父类实例化
Console.WriteLine(getTheName.ReWrite_Get()); // 调用父类虚方法
Console.WriteLine(getTheName.Cover_Get()); // 调用父类实方法 GetTheName rewrite = new Rewrite(); // 用子类创建父类对象
Console.WriteLine(rewrite.ReWrite_Get()); GetTheName ovverides = new Cover(); // 用子类创建父类对象
Console.WriteLine(ovverides.Cover_Get());
Console.ReadKey();
}
}
}
结果:

总结
1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改)。
2:当用子类创建父类的时候,如 C1 c3 = new C2(),重写会改变父类的功能,即调用子类的功能;而覆盖不会,仍然调用父类功能。
3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。
4:抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。
5:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。
参考: https://www.cnblogs.com/Look_Sun/p/4551164.html
C# 重写(override)和覆盖(new)的更多相关文章
- 重载(overload),覆盖/重写(override),隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖/重写(override),隐藏(hide).在早期的C++书籍中,常常把重载(overload)和覆盖(override)搞错 ...
- C# 重载 overload,重写override覆盖
重载overload 派生类和基类的方法同名,其中访问修饰符(public,private,protected,internal,protected internal),返回类型,参数类型,个数,顺序 ...
- C#中隐藏(new)、方法重写(override)、重载(overload)的区别
转自:http://www.cnblogs.com/glife/archive/2009/12/28/1633947.html 重载.重写和隐藏的定义: 重载:public string ToStri ...
- java学习笔记(十一):重写(Override)与重载(Overload)
重写(Override) 重写是子类对父类的允许访问的方法的进行重新编写, 但是返回值和形参都不能改变. 实例 class Animal{ public void run(){ System.out. ...
- 实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- 函数重载(overload)和函数重写(override)
1. 前言: 在C++中有两个非常容易混淆的概念,分别是函数重载(overload)和函数重写(overwirte).虽然只相差一个字,但是它们两者之间的差别还是非常巨大的. 而通过深入了解这两个概念 ...
- C# 方法重载 overload、方法重写 override、隐藏 new
一.重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同.这样才能通过传递不同的参数来决定到底调用哪一个. 值得注意的是,方法重载只有通过参数不同来判断调用哪个方法, ...
- Java 学习(12):重写(Override)与重载(Overload) & 多态
目录 --- 重写 --- 重载 --- 多态 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可 ...
- php类的继承(基本概念,访问权限修饰符,重写override)
类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...
随机推荐
- humans.txt学习理解
可以通过以下链接访问到Google的humans.txt https://www.google.com/humans.txt 百度上有关于humans.txt的介绍 http://baike.baid ...
- 安装APK时SO库的选择策略
此文已由作者尹彬彬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 0X0 前言 在Android系统中,当我们安装apk文件的时候,lib目录下的so文件会被解压到app的原 ...
- 在 beforeSend中设置ajax请求的Content-type
$.ajaxSetup({ beforeSend: function (xhr, settings) { if (settings.type == "PO ...
- HihoCoder 1121二分图一•二分图判定
背景: 个名字,表示这两个人有一场相亲.由于姑姑年龄比较大了记性不是太好,加上相亲的人很多,所以姑姑一时也想不起来其中有些人的性别.因此她拜托我检查一下相亲表里面有没有错误的记录,即是否把两个同性安排 ...
- lightoj 1076 【二分找满足条件的最左】
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ...
- 类的property特性
目录 什么是 property特性 简单示例 property属性的两种方式 装饰器 类属性方式 property+类的封装 应用 私有属性添加getter和setter方法 使用property升级 ...
- Spring事件机制详解
一.前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但 ...
- 转 java ClassLoader
http://blog.csdn.net/xyang81/article/details/7292380 http://www.ibm.com/developerworks/cn/java/j-lo- ...
- 初入Three.js 第一章
一.什么是WebGL? 1.WebGL是在浏览器中实现三维效果的一套规范. 二.什么是threejs? 1.你将它理解成three + js就可以了.three表示3D的意思,js表示javascri ...
- [题解]luogu_AT1224_JOIOJI
https://www.cnblogs.com/fengzhiyuan/p/7588443.html 不会map,有点菜 1.要想知道三个字母出现次数相等, 为J [ i ]-J [ j ]== O[ ...