? 重載的條件:
??????????1.必須在同一個類中2.方法名必須相同3.參數(shù)列表不能相同。
???重寫的條件:
??????????1. 在不同的類中
????????? 2. 發(fā)生方法重寫的兩個方法返回值,方法名,參數(shù)列表必須完全一致
????????? 3. 子類拋出的異常不能超過父類相應(yīng)的方法拋出的異常
????????? 4. 子類方法的訪問級別不能低于父類相應(yīng)方法的訪問級別(public,package,protected, private)
????????? 5.方法體不同
super()調(diào)用父類構(gòu)造,super.只能調(diào)用父類的實(shí)例方法
this()調(diào)用該類的其他構(gòu)造方法,this.調(diào)用類的屬性,方法
如果父類有有參構(gòu)造,子類必須定義構(gòu)造方法
重載:
?????? 重載發(fā)生在同一個類中;重載主要是針對同一個類中方法名相同但參數(shù)(必須的)不同或返回類型(不是必須的)不同的情況??梢詤⒄杖缦碌拇a
class OverLoadTest
????{
????????public void Hello()
????????{
????????}
????????public void Hello(string str)
????????{
????????}
????????public string Hello()
????????{
????????}
????}
在這段代碼中有三個具有相同名稱的方法Hello,他們彼此之間是重載的關(guān)系,注意兩點(diǎn):他們共同存在于一個類中,雖有同樣的名字但是執(zhí)行不同的操作;第一個方法和第三個方法只有返回類型不同,這在C# 中是不允許的,編譯器會報出“已定義一個名為"Hello"的方法”的錯誤。
重寫:
??????重寫發(fā)生在有繼承關(guān)系的類之間
??????重寫發(fā)生在派生類上,通過override關(guān)鍵字來改寫從其父類繼承過來的具有相同返回值,方法名稱和參數(shù)列表的方法。
????class Program
????{
????????static void Main(string[] args)
????????{
????????????OverWriteTestTT owTT = new OverWriteTestTT();
????????????owTT.Hello();
????????????overWriteTestTTT owTTT = new overWriteTestTTT();
????????????owTTT.Hello();
????????}
????}
????class OverWriteTest
????{
????????//Over write the method ToString();
????????public override string ToString()
????????{
????????????return "hello world";
????????}
????????//Define a virtual method Hello() to be over written
????????public virtual void Hello()
????????{
????????????Console.WriteLine("hello");
????????}
????}
????class OverWriteTestTT : OverWriteTest
????{
????????public override void Hello()
????????{
????????????Console.WriteLine("No hello world");
????????}
????}
????class overWriteTestTTT : OverWriteTestTT
????{
????????//Over write the method Hello() of class OverWriteTestTT
????????public override void Hello()
????????{
????????????base.Hello();
????????????Console.WriteLine("NNo hello world");
????????}
????}
上面這段代碼演示了如何對父類的方法進(jìn)行重寫,需要注意的地方有兩點(diǎn):可以在子類中被重寫的方法一定要被標(biāo)記成virtual(虛擬), abstract(抽象), override(重寫)標(biāo)記為virtual 和abstract 的函數(shù)就是為了重寫而創(chuàng)建的,標(biāo)記為override的函數(shù)本身是由前兩種函數(shù)重寫而來的,所以它可以被重寫也是順理成章的了;重寫的函數(shù)必須在子類中出現(xiàn),而且任何一個父類的函數(shù)在其一個子類中只能被重寫一次。(這一點(diǎn)很好理解,當(dāng)你要重寫兩次時,該子類中將定義兩個返回類型,方法名稱 和參數(shù)列表都相同的函數(shù),這肯定是不可能的)。