文档章节

重写和覆盖区别

l
 liupeng4176
发布于 2016/02/01 11:20
字数 482
阅读 3
收藏 0


 

    今天看到重写和覆盖,有些忘记了,在博客园上看到了介绍,顺便学习了,记录下方便学习,
原文地址


原文内容为:


重写

用关键字 virtual 修饰的方法,叫虚方法。可以在子类中用override 声明同名的方法,这叫“重写”。相应的没有用virtual修饰的方法,我们叫它实方法。
重写会改变父类方法的功能。
看下面演示代码:


#region 重写

public class C1
{
    public virtual string GetName()
    {
        return "C1_Class";
    }
}

public class C2 : C1
{
    public override string GetName()
    {
        return "C2_Class";
    }
}

 C1 c1 = new C1();
 Console.WriteLine(c1.GetName());//输出“C1_Class


 C2 c2 = new C2();
 Console.WriteLine(c2.GetName());//输出“C2_Class

 //重点看这里

 C1 c3 = new C2();
 Console.WriteLine(c3.GetName());//输出“C2_Class” 


#endregion


 

覆盖
在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。

覆盖不会改变父类方法的功能。

看下面演示代码:


#region 覆盖

public class C1
{
    public string GetName()
    {
        return "C1_Class
";
    }
}

public class C2 : C1
{
    public new string GetName()
    {
        return "C2_Class";
    }
}

C1 c1 = new C1();
Console.WriteLine(c1.GetName());//输出“C1_Class

C2 c2 = new C2();
Console.WriteLine(c2.GetName());//输出“C2_Class

//重点看这里,和上面的重写作比较

C1 c3 = new C2();
Console.WriteLine(c3.GetName());//输出“C1_Class” 


#endregion

 

总结

1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改)。

2:当用子类创建父类的时候,如 C1 c3 = new C2(),重写会改变父类的功能,即调用子类的功能;而覆盖不会,仍然调用父类功能。

3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。

4:抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。

5:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。


本文转载自:

共有 人打赏支持
上一篇: C#虚方法
下一篇: c#的访问权限
l
粉丝 0
博文 4
码字总数 0
作品 0
郑州
私信 提问
C++中重载、重写(覆盖)的区别实例分析

本文实例讲述了C++中重载、重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念。具体分析如下: 1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有...

h8b6pk7m7r8
2018/01/08
0
0
Dockerfile中CMD,ENTRYPOINT及ADD,COPY的区别

(1)Dockerfile中CMD,ENTRYPOINT的区别 ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记 CMD,表示镜像运行默认参数,可被重写覆盖 ENTRYPOINT/CMD都只能在文件中存...

Mr_sheng
2018/06/15
0
0
final,finally和finallize的区别override和overload

请简述final,finally和finallize的区别是什么?override和overload的区别又是什么? final用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。 finally是异常处理语句...

一别经年
2014/03/20
0
0
overload与override的区别

重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。 Override的规则 参数列表必须完全与被重写方法的相同; 访问权限不能比父类中...

奔跑吧李博
2018/12/29
0
0
Overloading和Overriding的区别

方法覆盖和方法重载的异同 Overloading 重载 Overriding 重写,又称覆盖 方法覆盖和方法重载具有以下相同点: 都要求方法同名 都可以用于抽象方法和非抽象方法 方法覆盖和方法重载的不同点:...

Zenith-Lee
2014/02/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PDMan-2.1.1 发布:用心开源,免费的国产数据库建模工具(春节前最后一个版本)

一、软件介绍 PDMan 是一款开源免费的数据库模型建模工具,是PowerDesigner之外另一种更好的选择。支持Windows,Mac,Linux等操作系统,具有上手容易,使用简单的特点。 2018年获得码云GVP (Gi...

O龙猫O
32分钟前
5
0
OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
23
3
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
8
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
10
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部