C#方法重载(overload)、重写(覆盖)(override)、隐藏(new)
重载
同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。
作用: 重载必须发生在一个类中,函数名相同,参数类型或者个数可以不同,返回值类型可以不同。根据参数选择调用方法。重载就是让类以统一的方式处理不同的数据,在同一个类中多个方法可以用同一个名字就叫做方法重载。

重写override
作用:用于实现接口、抽象类、虚方法
重写override一般用于接口实现和继承类的方法改写,要注意:
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
重写object 类型的ToString()
5、可以说,override是一个非常智能的东西,它可以动态决定究竟是采用父类还是子类的方法。
public override string ToString()
{
return base.ToString();
}
隐藏(new)
隐藏简单地说就是基类中已经定义的方法,派生类中也需要用,而两个方法完全相同的话就会出现语法错误,所以用关键字new把基类中的方法隐藏了,但是该方法想用的时候还可以发挥作用,又不会发生语法冲突。
public class Animal
{
public string Name => this.GetType().Name; public virtual void Eat()
{
Console.WriteLine($"我是{this.Name},我需要吃东西");
} public void Drink()
{
Console.WriteLine($"我是{this.Name},我需要喝水");
}
}
public class Bird : Animal
{
/// <summary>
/// 鸟有自己可以飞的方法
/// </summary>
public void Fly()
{
Console.WriteLine($"我是{this.Name},我可以飞");
}
public new void Eat()
{
Console.WriteLine("我在睡觉");
} }
C#方法重载(overload)、重写(覆盖)(override)、隐藏(new)的更多相关文章
- 【转】重载(overload),覆盖(override),隐藏(hide)的区别
原文网址:http://www.cppblog.com/zgysx/archive/2007/03/12/19662.html 写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖 ...
- 重载(overload),覆盖(override),隐藏(hide)的区别
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的, ...
- 重载(overload)、覆盖(override)和隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的, ...
- 重载(overload)、覆盖(override)、隐藏(hide)的区别
http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的 ...
- 区分重载(overload),覆盖(Override)和隐藏(hide)
重载overload,这个概念是大家熟知的.在同一可访问区内被声名的几个具有不同参数列的(参数的类型.个数.顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制就是重载.重载不关 ...
- 重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别
覆盖:子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖. 重载:子类继承了父类的同名有参函数.当子类继承了父类的一个 ...
- JAVA是否允许返回值类型不同的重载overload或覆盖override
在看<Thinking in java>的时候,看到子类的方法和父类的方法名字相同,但是返回值类型不同,然后就开始怀疑这属于覆盖吗,到网上找到了答案,分析见接下来的网址: http://g ...
- 重载(overload),覆盖/重写(override),隐藏(hide)
写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖/重写(override),隐藏(hide).在早期的C++书籍中,常常把重载(overload)和覆盖(override)搞错 ...
- 方法重载overload与方法重写overwrite
方法重载overload: 在同一个类中,出现相同的方法名,与返回值无关,参数列表不同:1参数的个数不同 2参数类型不同 在调用方法时,java虚拟机会通过参数列表来区分不同同名的方法 方法重写ove ...
- 方法重载,new,override
方法重载:参数列表不一样,方法名字一样,包括泛型,和返回值无关 new: 复写,方法重载 overload 继承是对于普通方法和属性 复写 父类的 override:覆盖,重写 , 对于抽象 ...
随机推荐
- CAS基础
有锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2)一个线程持有锁会导致其它所有需要此锁的线程挂起. (3)如果一个优先级高的线程等待一 ...
- IDEA2017 maven Spark HelloWorld项目(本地断点调试)
作为windows下的spark开发环境 1.应用安装 首先安装好idea2017 java8 scalaJDK spark hadoop(注意scala和spark的版本要匹配) 2.打开idea, ...
- Windows和Linux关闭占用端口
关闭端口的方式有很多种,但是常用的就是这种比较来的快一点 如果通过以下方式解决不了,可以通过关闭服务来解决 Windows 1.查看端口占用的进程 netstat -ano | findstr 800 ...
- 阿里Java规范:【强制】所有的 POJO 类属性必须使用包装数据类型
在 Java 开发手册中有这一条: 我们知道基本类型和包装类型有很多不同点: 封装类型可以调用各种方法,而基本类型没有 封装类型声明字段之后可以不设置默认值,而基本类型需要初始化默认值.比如 int ...
- Docker 与 K8S学习笔记(十八)—— Pod的使用
Pod 是一组紧密关联的容器集合,它们共享IPC.Network和UTS namespace,是 Kubernetes 调度的基本单元.Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件 ...
- UncLutter
在 Mac 上「速记」的正确姿势:Unclutter 现代人的大脑,每天都会被大量有用,或无用的东西充斥着,过多「思想垃圾」的沉重负担就容易导致失忆.也就是说,你很可能会记得一个无关紧要,但给你留下深 ...
- 面渣逆袭:Java基础五十三问,快来看看有没有你不会的!
大家好,我是老三, 面渣逆袭 系列继续.这节我们回到梦开始的地方--Java基础,其实过了萌新阶段,面试问基础就问的不多,但是保不齐突然问一下.想一下,总不能张口高并发.闭口分布式,结果什么是面向对象 ...
- numpy 矩阵在作为函数参数传递时的奇怪点
numpy 矩阵在作为函数参数传递时的奇怪点 import numpy as np class simpleNet: def __init__(self): self.W = np.array([1, ...
- 如何在pyqt中实现平滑滚动的QScrollArea
平滑滚动的视觉效果 Qt 自带的 QScrollArea 滚动时只能在两个像素节点之间跳变,看起来很突兀.刚开始试着用 QPropertyAnimation 来实现平滑滚动,但是效果不太理想.所以直接 ...
- for、while、do...while循环结构
循环结构分别有: while 循环 do...while 循环 for 循环 在Java5中引入了一种主要用于数组的增强型for循环 while 循环 while是最基本的循环,它的结构为: whil ...