前言:在前面的博文中我们分别提到了重写与重载并对其做了较为详细的介绍,但是它们两者在名字上只有一字之差,那么在用法上和其他方面有什么区别呢?今天跟随博主的脚步带你们去瞧瞧…
一.在定义上:
重写:指的是派生类和基类有共同的方法的名称,但是派生类对基类方法中的功能进行重新编写,使用这个名称去实现自己的一些功能,返回值和形参都不能改变,也就是说外壳不变,核心重写!
重载:有多个名称相同的方法,我们通过定义不同的参数类型,从而进行调用我们所想要的用的方法;
二.在规则上:
1.重写的规则:
- 必须在继承里面;
- 方法名、参数个数和参数类型 都必须相同;
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类;
- 访问权限不能比父类中被重写的方法的访问权限更低;
- 声明为 static 的方法不能被重写,但是能够被再次声明;
2.重载的规则:
- 名称相同,参数列表不同;
- 参数个数相同,参数类型顺序不同;
三.在作用上:
1.重写的作用:
派生类根据自己要实现的功能,引用了基类的方法的名称,重新编写了自己的一些方法,实现了自己的一些功能;
2.重载的作用:
方便了我们根据不同的参数个数,顺序,类型,自动匹配方法,减少写过个函数名或方法名的重复步骤,调用的时候虽然方法名称相同,但是参数顺序和类型不同,我们可以根据这些来自动匹配需要的方法;
四.举例区别:
我在以下代码中运用了重写和重载,希望可以帮助你们了解:
class Person
{
public void First(string a,int age)
{
Console.WriteLine("我叫 {0} ,我是第 {1} 个",a,age);
}
public void First(int age,string b)
{
Console.WriteLine(",我是第 {1} 个, 我叫 {0} ", age, b);
}
public void First(int age, string b,string sex)
{
Console.WriteLine("我叫 {0} ,我是第 {1} 个,我喜欢 {2}", b, age,sex);
}
}
class Son:Person
{
public void First(string a, int age)
{
Console.WriteLine("我叫 {0} ,我是第 {1} 个", a, age);
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person();
Son son = new Son();
person.First("重载",1);
person.First(2,"重载");
person.First(3, "重载","重载");
son.First("重写",1);
Console.ReadLine();
}
}
运行结果: