C#重写(Override)详解
一.重写的概念:
既然想明白重写,首先肯定得了解它的概念,那么一起来看看究竟什么是重写呢?
重写:在父类中有一个方法,但是子类中也需要这个方法的名称,但是子类中的方法的逻辑与父类方法中的逻辑不相同,则需要在子类中对这个方法进行重写,重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
二.重写的原因:
如果父类中有一个方法,则子类中默认是不允许出现同名方法,如果出现了则系统认为是子类中要隐藏父类中的这个同名方法,那么在子类对象调用方法之后则调用到的是子类中的方法
如下代码所示:
1.调用子类继承父类中的方法:
class Vecetables
{
public void Fot(string a,int b)
{
Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b);
}
}
class XC:Vecetables
{
}
class Program
{
static void Main(string[] args)
{
Vecetables ve = new Vecetables();//父类的对象
XC xc = new XC();//子类的对象
ve.Fot("张三",1);//父类的方法
xc.Fot("李四",1);//子类的方法
Console.ReadLine();
}
}
运行结果:
2.子类与父类有同名的方法:
如果子类与父类的方法同名,那么系统默认隐藏父类中的同名方法,实际调用之后使用的是子类自己的这个方法,但是会有警告,告诉我们应该使用new关键字专门进行隐藏,如下所示:
class Vecetables
{
public void Fot(string a,int b)
{
Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b);
}
}
class XC:Vecetables
{
public void Fot(string a, int b)
{
Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b);
}
}
class Program
{
static void Main(string[] args)
{
Vecetables ve = new Vecetables();//父类的对象
XC xc = new XC();//子类的对象
ve.Fot("张三",1);//父类的方法
xc.Fot("李四",1);//子类的方法
Console.ReadLine();
}
}
系统提示:
运行结果:
3.对其继承的方法进行隐藏:
new
关键字写于成员类型和名称之间,如下所示,则可以正常进行显示:
public new void Fot(string a, int b)
{
Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b);
}
三.重写的目的:
子类想放弃父类中的同名方法,在子类中声明一个新的方法逻辑,从而采用子类中的自己的方法,有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,有自己的方法逻辑,只不过是想用父类的这个方法的名字,这就需要采用方法的重写;
四.重写的规则:
1. 必须是在继承里;
2. 方法名、参数个数和参数类型 都必须相同;
3. 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类;
4. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public
,那么在子类中重写该方法就不能声明为 protected
;
class Vecetables
{
public void Fot(string a,int b)
{
Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b);
}
}
class XC:Vecetables
{
protected new void Fot(string a, int b)
{
Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b);
}
}
这样子类的方法不会被引用,相当于将父类中的方法执行了两次:
5. 声明为 static 的方法不能被重写,但是能够被再次声明;
class Vecetables
{
static void Fot(string a,int b)
{
Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b);
}
}
class XC:Vecetables
{
static void Fot(string a)
{
Console.WriteLine("我叫{0}是子类的方法", a);
}
}
程序会提示报错:
五.重写的前提以及好处:
既然知道了重写,那么在什么情况下进行重写又或者是重写的前提是什么呢?一起来探索下吧!
重写的前提:在进行重写时,父类中的这个方法必须是虚拟或者抽象;
重写的好处重写的好处在于子类可以根据需要,定义特定于自己独特的行为。,也就是说子类能够根据需要实现父类的方法,只是引用了父类方法的名字,但是有自己的行为,自己去实现一些方法。
出处:https://blog.csdn.net/qq_45096273/article/details/106779333
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/16831536.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2022-10-27 11:09 jack_Meng 阅读(5916) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2012-10-27 有线路由器下面接无线路由器(笔记本无线上网),如何设置?