一.重写的概念:
二.重写的原因:
如果父类中有一个方法,则子类中默认是不允许出现同名方法,如果出现了则系统认为是子类中要隐藏父类中的这个同名方法,那么在子类对象调用方法之后则调用到的是子类中的方法
如下代码所示:
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); } }
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://javaforall.net/202959.html原文链接:https://javaforall.net
