前言:在前面的博文中我們分別提到了重寫與重載並對其做了較爲詳細的介紹,但是它們兩者在名字上只有一字之差,那麼在用法上和其他方面有什麼區別呢?今天跟隨博主的腳步帶你們去瞧瞧…
一.在定義上:
重寫:指的是派生類和基類有共同的方法的名稱,但是派生類對基類方法中的功能進行重新編寫,使用這個名稱去實現自己的一些功能,返回值和形參都不能改變,也就是說外殼不變,核心重寫!
重載:有多個名稱相同的方法,我們通過定義不同的參數類型,從而進行調用我們所想要的用的方法;
二.在規則上:
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();
}
}
運行結果: