日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二节:重写(new)、覆写(overwrite)、和重载(overload)

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二节:重写(new)、覆写(overwrite)、和重载(overload) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 重寫

1.?關鍵字:new

2.?含義:子類繼承父類中的普通方法,如果在子類中重寫了一個和父類中完全相同的方法,子類中會報警告(問是否顯式的隱藏父類的中的方法),如果在子類中的方法前加上new關鍵字,則警告消失。

注意:

  * 雖然可以不使用 new 修飾符來隱藏成員,但將收到編譯器警告。 如果使用 new 來顯式隱藏成員,將禁止此警告。

  * 這里需要特別注意,隱藏父類方法是指聲明的完全是子類實例,? ? ? eg child類繼承parent類, 并在child類中重新聲明了一個和parent中相同的方法show。

那么分兩種情況:

  * a. child c=new child(); c.show()進行調用,無論child類中的show方法前加沒加new關鍵字,調用的都是child類中的方法,只是加上new關鍵字后,不出警告。

  * b. parent p=new child(); p.show()進行調用,無論child類中的show方法前加沒加new關鍵字,調用的都是parent類中的方法,因為這是不同方法,不涉及override,不滿足上述聲明的new關鍵字替換父類中的方法的描述。

3. 聲明一個parentClass父類,里面有三個方法。

1 public abstract class parentClass2 {3 //下面兩個普通方法實現自身的重載4 public void CommonMethord1()5 {6 Console.WriteLine("parentClass CommonMethord1");7 }8 public void CommonMethord1(string msg)9 { 10 Console.WriteLine("parentClass CommonMethord1"); 11 } 12 public void CommonMethord2() 13 { 14 Console.WriteLine("parentClass CommonMethord2"); 15 } 16 }

4. 聲明一個childClass類,里面重寫了兩個方法。

1 public class childClass : parentClass2 {3 /// <summary>4 /// 單獨聲明子類實例的時候,將替換父類中的方法5 /// </summary>6 public void CommonMethord1()7 {8 Console.WriteLine("childClass CommonMethord1");9 } 10 /// <summary> 11 /// new 關鍵字去除上述警告,單獨聲明子類實例的時候,將替換父類中的方法 12 /// </summary> 13 /// <param name="msg"></param> 14 public new void CommonMethord1(string msg) 15 { 16 Console.WriteLine("childClass CommonMethord1"); 17 } 18 }

5. 調用

1 {2 parentClass p1 = new childClass();3 childClass p2 = new childClass();4 Console.WriteLine("-----------------------------1.子類的直接調用--------------------------------------");5 p2.CommonMethord1(); //結果:子類方法 (非顯式隱藏,但也隱藏了,會報警告)6 p2.CommonMethord1("ddd"); //結果:子類方法 (含有new關鍵字,顯式的隱藏了父類中的方法,沒有警告)7 p2.CommonMethord2(); //結果:父類方法8 9 Console.WriteLine("-----------------------------2.普通方法重寫,調用的都是父類方法--------------------------------------"); 10 p1.CommonMethord1(); //結果:父類方法 11 p1.CommonMethord1("ddd"); //結果:父類方法 12 p1.CommonMethord2(); //結果:父類方法 13 }

二. 覆寫

1.?關鍵字:override

2.?含義:在子類中,繼承的父類中的抽象方法(abstract)和虛方法(virtual),子類可以對其進行覆寫,其中父類中的抽象方法,子類中必須被覆寫。

 抽象方法:沒有方法體,子類必須覆寫。

 虛方法:必須有方法體,子類可以對其進行覆寫,也可以不進行覆寫。

3. 新建一個名叫parentClass的抽象類,里面有一個抽象方法和兩個虛方法。

1 public abstract class parentClass2 {3 //下面為抽象方法4 public abstract void abstractMethord();5 //下面兩個方法為虛方法6 public virtual void virtualMethord1()7 {8 Console.WriteLine("parentClass virtualMethord1");9 } 10 public virtual void virtualMethord2() 11 { 12 Console.WriteLine("parentClass virtualMethord2"); 13 } 14 }

4. 新建一個childClass子類,繼承parentClass類,并且對virtualMethord2虛方法進行覆寫

1 public class childClass : parentClass2 {3 4 public override void abstractMethord()5 {6 Console.WriteLine("childClass abstractMethord");7 }8 //加上sealed關鍵字,子類將不能對其繼續進行覆寫9 public sealed override void virtualMethord2() 10 { 11 Console.WriteLine("childClass virtualMethord2"); 12 } 13 }

5. 調用

1          parentClass p1 = new childClass();2 childClass p2 = new childClass();3 Console.WriteLine("-----------------------------1.子類的直接調用--------------------------------------");4 p2.abstractMethord(); //結果:子類方法5 p2.virtualMethord1(); //結果:父類方法6 p2.virtualMethord2(); //結果:子類方法7 Console.WriteLine("-----------------------------2.抽象類(符合里氏替換原則)的形式調用--------------------------------------");8 p1.abstractMethord(); //結果:子類方法9 p1.virtualMethord1(); //結果:父類方法 10 p1.virtualMethord2(); //結果:子類方法

三. 重載(overload)

1.?關鍵字:無關鍵字

2.?含義:在同一個類中,同一個名稱的方法參數的個數不同、參數類型不同、參數個數和參數類型都不同

eg: parentClass中的CommonMethord1的兩個方法就是重載

總結

以上是生活随笔為你收集整理的第二节:重写(new)、覆写(overwrite)、和重载(overload)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。