一、 描述 在面向?qū)ο蟮恼Z言中,允許我們在同一個類中定義多個方法名相同、參數(shù)列表(參數(shù)類型,參數(shù)個數(shù))不同的方法,這樣的形式我們稱為方法重載。調(diào)用時編譯器會根據(jù)實際傳入?yún)?shù)的形式,選擇與其匹配的方法執(zhí)行。 二、 重載的分析 1.生活中的方法重載
2.將生活重載的表現(xiàn)形式,抽象成代碼的形式: 3.構(gòu)成方法重載的條件 a方法名相同。 b.方法參數(shù)類型不同或者參數(shù)個數(shù)不同。 c.在同一個類中。 三、 重載示例 1.我們實現(xiàn)一個薪水計算類,用重載的方法實現(xiàn)項目經(jīng)理和程序員的薪水計算 1 class ComSalary 2 { 3 4 //項目經(jīng)理的薪水計算:薪水=基礎(chǔ)工資+項目獎金+分紅 5 public static int Pay(PM pm) 6 { 7 return pm.BasePay + pm.MeritPay + pm.Bonus; 8 } 9 10 //程序員的薪水計算:薪水=基礎(chǔ)工資+項目獎金 11 public static int Pay(SE se) 12 { 13 return se.BasePay + se.MeritPay; 14 } 15 16 } 17 18 static void Main(string[] args) 19 { 20 21 //實例化一個程序員對象 22 SE tom = new SE { Id="998", Name="湯姆", BasePay=6000, MeritPay=1000}; 23 24 //實例化一個項目經(jīng)理對象 25 PM jack = new PM { Id = "110", Name = "杰克", BasePay = 9000, MeritPay = 2000, Bonus=1500}; 26 27 //計算工資 28 Console.WriteLine("程序員的薪水:"+ComSalary.Pay(tom)); 29 Console.WriteLine("項目經(jīng)理的薪水:" + ComSalary.Pay(jack)); 30 31 } 運行結(jié)果:
2.示例解析: 通過Pay()方法重載計算項目經(jīng)理和程序員的薪水。假如我們不用方法重載會怎么樣呢?例如,計算程序員薪水寫成PaySE(SE se)方法,而計算項目經(jīng)理的薪水用PayPM(PM pm)方法。這樣確實也能完成計算薪水的任務(wù),但是不符合面向?qū)ο蟮乃枷?,造成一些冗余形式? 大家可以想想,在實際開發(fā)中計算薪水的員工可能還有很多種角色,如股東等,我們夸張一點,將需要計算的角色設(shè)為上千個,那么將不得不寫一百個不同的方法。此時,延伸出來的問題有:1.方法命名的困難;2.調(diào)用方法者調(diào)用方法選擇的困難。因此,方法重載就解決了這樣的麻煩。 四、重載的細節(jié) 1.無關(guān)返回值,圖例: 結(jié)論:僅方法名相同參數(shù)列表相同,但返回值類型不同的方法不能構(gòu)成重載。 2.類中的構(gòu)造函數(shù)也可以實現(xiàn)重載,是方法重載的一種特殊形式。
|
|