重写

用关键字 virtual 修饰的方法,叫虚方法。可以在子类中用override 声明同名的方法,这叫“重写”。相应的没有用virtual修饰的方法,我们叫它实方法。
重写会改变父类方法的功能。
 
覆盖 
在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。

覆盖不会改变父类方法的功能。
 
示例代码:(C# 控制台程序)
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

最新文章

  1. curl 小结
  2. left join on 和where条件的放置
  3. phpmyadmin Wrong permissions on configuration file, should not be world writable!
  4. Opencv结构与内容
  5. 1.MySQL的安装(linux Ubuntu环境下)
  6. Phonegap 3.0 拍照 出错的说明
  7. WPF Customize TabControl
  8. Autofac 入门
  9. v3学院带你一次性认清UART、RS-232、RS-422、RS-485的区别
  10. 【Unity Shaders】Mobile Shader Adjustment—— 什么是高效的Shader
  11. ZooKeeper的使用---命令端
  12. hibulder中使用git教程
  13. 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
  14. CCSprite使用记录
  15. ASP.NET开发,从二层至三层,至面向对象 (4)
  16. linux之间文件传输(之scp)
  17. js如何判断小数点后有几位
  18. Computer
  19. ActiveMQ笔记之安装(Linux)
  20. 再续前缘-apache.commons.beanutils的补充

热门文章

  1. 洛谷 - P4997 - 不围棋 - 并查集 - 模拟
  2. lightoj1004【基础DP】
  3. flask环境安装
  4. [POI2011]Plot
  5. oracle tps
  6. python学习之字符编码
  7. 持续集成~Jenkins里的NuGet和MSBuild插件
  8. C/C++程序员应聘常见面试题深入剖析(1)
  9. git clone fatal: unable to access 'https://github.com/carlon/demo.git/': Failed to connect to github.com port 443: Timed out
  10. Does Little'law really applicable to apply performance model now?