C#中重载与重写区别分析
作者:lijiao 发布时间:2023-11-01 17:43:05
一、前言
接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展性等优点。
本人之前一直接触的是VB语言,所以正式接触面向对象的编程语言还要从C#开始。前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。
二、定义
重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型不同。因此重载对返回值没有要求,可以相同,也可以不同。但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。
重写:继承时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同。例如父类方法声明为virtual(虚方法),子类中使用override申明此方法的重写。
三、示例
1、重载:
我们建立一个猫类,在这个类中构造两个方法。一个是带参数姓名的方法,另一个是不带参数姓名的方法。这样当我们初始化一个“猫”的对象时,就可以选择给对象起名或者不起名。从而达到扩展的目的。
2、 重写:
比如动物都有“叫”的方法。猫和狗是它的子类,猫的叫声是“喵”,狗的叫声是“汪”,如何在子类中重写父类的方法呢?首先在动物类中构造一个虚方法。
Class Animal
{
public virtual string Shout()//注意修饰符中增加了一个virtual,它表示此方法是虚方法,可以被子类重写
{
return "";
}
}
在构建猫这个类时,我们重写“叫”这个方法
Class cat:Animail
{
Public override string Shout()
{//关键字override,表示方法重写
string result="喵";
return result;
}
}
在构建狗这个类时,我们也重写“叫”这个方法
Class Dog:Animal
{
public override string Shout()
{
string result="汪";
return result;
}
}
重写发生在父类和子类之间,声明的是父类,实例化的是子类。本例子实现了多态。
四、小结
重载必须发生在一个类中,方法名相同,参数不同。值得注意的是,方法重载必须通过参数不同来判断调用哪个方法,而不能通过返回值。
重写override一般用于接口实现和继承类的方法改写。值得注意的是,被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有进行覆盖。
猜你喜欢
- Spring中添加计时器的时候根据业务需求可能会需要动态处理触发时间;import org.slf4j.Logger; import org
- 在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。为什么选择 Kotlin? 简洁:
- Java 开发语言中实现HTTP请求的方法主要有两种:一种是JAVA的标准类HttpUrlConnection,比较原生的实现方法;另一种是
- spring针对Bean之间的循环依赖,有自己的处理方案。关键点就是 * 缓存。当然这种方案不能解决所有的问题,他只能解决Bean单例模式下非
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- Spring AOP底层原理代理模式一、什么是 AOPAOP 就是面向切面编程,是 OOP(面向对象编程)的延续。利用 AOP 可以对业务逻
- 前言昨晚想在Android应用中增加一个int映射到String的字典表,使用HashMap实现的时候,Eclipse给出了一个警告,昨晚项
- 上帝之火本系列讲述的是开源实时监控告警解决方案Prometheus,这个单词很牛逼。每次我都能联想到带来上帝之火的希腊之神,普罗米修斯。而这
- 在PDF文档中,图层可以使部分内容选择性地被隐藏或显示。通过添加图层,我们可以将文本、图片、表格等元素精确定位于页面指定位置,并可将这些元素
- 引言翻译自:towardsdev.com/mastering-e…Kotlin 作为现代的、强大的编程语言,可以给开发
- 本文实例为大家分享了Unity实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下参考:腾讯课程(零基础制作像素鸟) 环境:U
- 本文实例为大家分享了Android 自定义弹窗提示的具体代码,供大家参考,具体内容如下Java文件:private void showSet
- 因为项目中之前的模块用的分页插件是Datatables,很方便,但是新做的模块表格中的布局有变化,Datatables插件满足不了了。为了风
- Spring Boot文件上传与下载在实际的Web应用开发中,为了成功上传文件,必须将表单的method设置为post,并将enctype设
- 本文实例讲述了Android4.0平板开发之隐藏底部任务栏的方法。分享给大家供大家参考,具体如下:getWindow().getDecorV
- 前言与消息发送紧密相关的几行代码:1. DefaultMQProducer producer = new DefaultMQProducer
- 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。程序分析:请抓住分子与分母的变化规
- 目录一、抽象类1.抽象类概述1.1 为什么要有抽象类?(抽象类的作用)1.2 抽象类的定义2. 抽象类特点3.抽象类成员特点4.抽象类案例二
- 前言Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式:在XML中进行显示配置在Java中进行显示配置隐式的bea
- 前言:在android HTML5 开发中有不少人遇到过 audio 标签 autoplay在某些设备上无效的问题,网上大多是讲怎么在js中