重寫(override)和重載(overload)的區別

1).重寫(override)異步

  override是重寫(覆蓋)了一個方法,以實現不一樣的功能,通常的用於子類在繼承父類時,重寫(從新實現)父類的方法,實現不一樣的需求。ide

重寫(覆蓋)的規則:spa

 1.重寫的方法必須是virtual,abstract或者是override(virtual修飾符不能與static,abstract,private或override修飾符一塊兒使用,靜態屬性上使用virtual修飾符會報錯)。3d

 2.重寫方法的參數列表必須徹底與被重寫的方法相同,不然不能稱爲重寫而是重載。code

 3.重寫的方法的訪問修飾符必定要大於被重寫方法的訪問修飾符(public>protected>default>private)。blog

 4.重寫的方法的返回值必須和被重寫的方法返回值一致。繼承

 5.重寫的方法所拋出的異常必須和被重寫的方法所拋出的異常一致,或是其子類(eg:父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法就不能拋出Exception,只能拋出IOException的子類異常,能夠拋出非檢查異常)。string

 6.被重寫的方法不能爲private,不然在其子類中只是定義了一個新的方法,並無對其重寫。it

 7.靜態方法不能被重寫爲非靜態方法(會編譯出錯)。io

 8.子類不能重寫父類中的final修飾的方法。

 1 /// <summary>
 2         /// 定能基類動物類
 3         /// </summary>
 4         /// <returns></returns>
 5         public class Animal
 6         {
 7             public virtual void Eatting()
 8             {
 9                 Console.WriteLine("用嘴吃飯!");
10             }
11         }
12 
13         #region 重寫(覆蓋原則)
14 
15         public class Pople : Animal
16         {
17             public override void Eatting() //基類必須是virtual方法
18             {
19                 Console.WriteLine("人用筷子吃飯!");
20             }
21         }
22 
23         public class Monkey : Animal
24         {
25             public new void Eatting()
26             {
27                 Console.WriteLine("猴子直接用手吃飯!");
28             }
29         }
30 
31 
32         #endregion
33 
34         /// <summary>
35         /// 方法重載和衝寫的區別
36         /// </summary>
37         /// <param name="args"></param>
38         public static void Main(string[] args)
39         {
40             var pople = new Pople();
41             (pople as Animal).Eatting(); //打印【人用筷子吃飯!】
42             pople.Eatting();//打印【人用筷子吃飯!】
43 
44             var monKey = new Monkey();
45             (monKey as Animal).Eatting();//打印【用嘴吃飯!】
46             monKey.Eatting();//打印【猴子直接用手吃飯!】
47 
48             Console.ReadKey();
49         }
演示代碼demo

 2).重載(overload)

  overload是重載,通常是用於在一個類實現若干重載的方法,這些方法的名稱相同參數不一樣。

 重載的規則:

 1.在使用重載時只能經過相同的方法名,不一樣的參數形式類實現。不一樣的參數類型能夠是不一樣的參數類型,不一樣的參數個數,不一樣的參數順序(參數類型必須不同)。

 2.不能經過訪問權限,返回類型,拋出的異常進行重載。

 3.方法的異步類型和數目不會對重載形成影響。

 

 1 using System;
 2 using System.Threading.Tasks;
 3 
 4 namespace OverReadOverLoadDifference
 5 {
 6     class Program
 7     {
 8         #region 方法重載
 9 
10         /// <summary>
11         /// 定義計算類
12         /// </summary>
13         public class Calculation
14         {
15             public int sunMation(int a)
16             {
17                 return a;
18             }
19 
20             public int sunMation(int a, int b)
21             {
22                 return a + b;
23             }
24         }
25 
26         #endregion
27 
28         /// <summary>
29         /// 方法重載
30         /// </summary>
31         /// <param name="args"></param>
32         public static void Main(string[] args)
33         {
34             #region 重載
35             var calculation = new Calculation();
36             Console.WriteLine(calculation.sunMation(1));
37             Console.WriteLine(calculation.sunMation(2, 3)); 
38             #endregion
39 
40             Console.ReadKey();
41         }
42     }
43 }
演示代碼demo
相關文章
相關標籤/搜索