【c#】重写和重载
来源:互联网 发布:短作业优先算法 编辑:程序博客网 时间:2024/04/28 14:41
初次看到这两个名词,感觉它们两个有着千丝万缕的联系似的,不过仔细一研究,发现它们的差异还是很大的。
通俗点说,重写就是改头换面,重新做人;重载就是给它加了个兄弟。
下面对比介绍一下重写和重载。
重写的规则:
1.在不同类中(有继承关系的类之间,一般用于派生类)。
2. 重写与被重写方法的相同点:参数列表、返回值、抛出异常,方法名 。
3.重写与被重写方法的不同点:重写方法的访问修饰符>被重写的访问修饰符(public>package>protected>private); 方法体不同。
4.重写的基方法必须是virtual、abstract或override,不能重写非虚方法或静态方法。
override和new区别:
new声明的方法,子类调用,运行子类的函数,而如果类型是基类,被隐藏的基类函数就会被调用。
子类函数使用override,用子类的类型来调用,会运行子类的函数,类是基类的时候,仍会调用子类的函数。
举例:
(源自C#重载和重写的区别)
public abstract class BaseClass//定义一个抽象的虚类 { public abstract void ShowInfo();//定义虚方法 public virtual void OutInfo()//定义抽象方法 { Console.WriteLine("这是基类的虚方法!"); } } public class SonClass : BaseClass//实现抽象基类BaseClass { public override void ShowInfo()//重写基类的抽象方法 { Console.WriteLine("重写基类的抽象方法"); } public override void OutInfo()//重写基类的虚方法 { Console.WriteLine("重写基类的虚方法"); } }
重载的规则:
1.在同一个类中
2.方法名必须相同
3.参数列表不能相同,返回值可以相同可以不同
4.任何一个父类的函数在其一个子类中只能被重写一次。
举例:
class BillPayment { void PayBill(int telephoneNumber) { //此方法用于支付固定电话费 } void PayBill(long consumerNumber) { //此方法用于支付电费 } void PayBill(long consumerNumber, double amount) { //此方法用于支付移动电话话费 } }
感受:
貌似相同,就要找不同点,为了留下深刻的印象;貌似不同,就要找相同点,减少知识量。生活就是学习,学习来源于生活。对学习的知识有一个感性的认识,感性的认识很容易让人接受,铭记,然后通过实践去理解理论,进行总结,最后创新是我们的终极目标。
PS:2015年8月17日
为什么用重写:
子类可以对父类的方法进行重写,让自己拥有父类的属性,方法更加的灵活,实现了多态。
为什么用重载:
方法重载可以再不改变原来方法的基础上,新增功能。提供了函数可扩展的能力。
重写和重载对比:
作用域:重写(父类与子类),重载(方法之间)
特点:重写(方法名相同) ,重载(方法名相同,参数不同)
- 【c#】重写和重载
- 【C#】重写和重载的区别
- 【C#】——重载和重写、覆盖
- 关于重载和重写
- 重载和重写
- 关于重写和重载
- C# 重写和重载
- 重载和重写
- JAVA 重写和重载
- 方法重载和重写
- 关于重载和重写
- 重写和重载
- 重载和重写
- 覆盖(重写)和重载
- java 重载和重写
- java 重写和重载
- 重载和重写
- 方法重写和重载
- svn版本控制系统基本操作
- Jeecms验证码-jcaptcha
- JavaScriptMemoryValidatorEvaluationSetup
- NYOJ—171—聪明的kk
- Python 迭代器
- 【c#】重写和重载
- 读书笔记-APUE第三版-(5)标准IO库
- uva10494 - If We Were a Child Again
- StyleCop学习笔记——自定义规则
- 计算机网络
- OpenCV——Delaunay三角剖分 [转载]
- 关于cortex—M系列的一点点思考
- JS:添加到收藏夹函数
- 第十周:复数类