文档章节

重写和覆盖区别

l
 liupeng4176
发布于 2016/02/01 11:20
字数 482
阅读 2
收藏 0
点赞 1
评论 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:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。


本文转载自:

共有 人打赏支持
l
粉丝 0
博文 4
码字总数 0
作品 0
郑州
C++中重载、重写(覆盖)的区别实例分析

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

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

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

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

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

一别经年
2014/03/20
0
0
java基础-JAVA中方法和变量在继承中的覆盖和隐藏

原文地址:http://renyanwei.iteye.com/blog/258304 同学某天问的一个问题,主要是static类型变量在父类和子类中值的变化。 下面这段代码只涉及到变量隐藏的情况,更详细的情况在转帖正文中有...

李墨白
2012/02/21
0
0
C++多态分析

多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,...

li_wen01
2017/08/05
0
0
小朋友学Java(8):重写与重载

一、重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。...

翡翠森林Z
2017/12/11
0
0
java基础(第一篇)继承与组合

前言 本文讲述上篇文章《java基础(第零篇)对象与类》遗留的问题继承与组合的区别,在讲述区别之前。先讲述继承的有关概念,如果你对继承很清楚的可以直接拉到下面阅读继承与组合的区别。 ...

wyn_lin
01/03
0
0
Overloading和Overriding的区别

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

Zenith-Lee
2014/02/20
0
0
重写、覆盖、重载、多态几个概念的区别分析

override->重写(=覆盖)、overload->重载、polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。 重写(...

大灰狼wow
2014/04/30
0
0
java中 == 与 equal 的区别

废话不多说了,开门见山吧,先来看一段代码: String str1 = new String("str"); String str2 = new String("str"); System.out.println("==比较 :"+ (str1 == str2)); System.out.println(......

Vincent-Duan
2016/10/29
9
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 2.18版本发布:支持Git协议v2,提升性能

Git 2.18版本发布:支持Git协议v2,提升性能Git 2.18版本发布:支持Git协议v2,提升性能 新版本协议的主要驱动力是使 Git 服务端能够对各种 ref(分支与 tag)进行过滤操作。 这就意味着,G...

linux-tao
6分钟前
0
0
python浏览器自动化测试库【2018/7/22-更新】

64位py2.7版本 更新 document_GetResources 枚举页面资源 document_GetresourceText 获取指定url的内容 包括页面图片 下载地址下载地址 密码:upr47x...

开飞色
23分钟前
20
0
关于DCL双重锁失效及解决方案

关于DCL双重锁失效及解决方案 Double Check Lock (DCL)实现单例 DCL 方式实现单例的优点是既能够在需要时才初始化单例,又能够保证线程安全,且单例对象初始化后调用getInstance方法不进行...

DannyCoder
29分钟前
0
0
PowerDesigner 16.5 安装配置

PowerDesigner16.5破解版是一款业内领先且开发人员常用的数据库建模工具,PowerDesigner可以从物理和概念两个层面设计数据库,方便用户制作处清晰直观的数据流程图和结构模型,欢迎有需要的朋...

Gibbons
53分钟前
0
0
mac Homebrew 指令积累

1通用命令 brew install [包名] //安装包 brew list //列举安装的包 brew info [包名] // 显示安装包的详细信息 mysql 相关 #启动mysql 服务 brew service start mysql my...

Kenny100120
今天
0
0
前端Tips: 创建, 发布自己的 Vue UI 组件库

创建, 发布自己的 Vue UI 组件库 前言 在使用 Vue 进行日常开发时, 我们经常会用到一些开源的 UI 库, 如: Element-UI, Vuetify 等. 只需一行命令, 即可方便的将这些库引入我们当前的项目: n...

ssthouse_hust
今天
1
0
大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
今天
4
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
今天
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
今天
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部