北大青鳥accp6.0深入.net平臺和編程參考答案tp_第1頁
北大青鳥accp6.0深入.net平臺和編程參考答案tp_第2頁
北大青鳥accp6.0深入.net平臺和編程參考答案tp_第3頁
北大青鳥accp6.0深入.net平臺和編程參考答案tp_第4頁
北大青鳥accp6.0深入.net平臺和編程參考答案tp_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第六章初識繼承和多態(tài)回顧與作業(yè)點評使用new實例化對象時,調(diào)用了什么?說出方法重載的幾個特點?預(yù)習檢查子類中調(diào)用父類成員的關(guān)鍵字是什么?重寫父類方法使用什么關(guān)鍵字?本章任務(wù)使用繼承和多態(tài)實現(xiàn)模擬汽車行駛實現(xiàn)員工匯報工作實現(xiàn)計算器理解繼承的概念能夠利用繼承建立父類和子類理解多態(tài)的概念會重寫虛方法實現(xiàn)多態(tài)本章目標代碼冗余對比兩個類PM、SE加入CEO類,具有這些相同的屬性年齡、性別、姓名等是重復(fù)的如何共用重復(fù)代碼?提取冗余代碼將公共的成員放到一個類中保留自己特有的成員保留自己特有的成員提取后的應(yīng)用class SE:Employee public SE(string id, string name,

2、 int age, Gender gender,int popularity) this.ID = id; this.Name = name; this.Age = age; this.Gender = gender; this.Popularity = popularity; / 人氣值 public int Popularity get; set; .只有特有的屬性公共屬性仍可訪問繼承卡車和巴士都是汽車 生活中的繼承汽車 剎車行駛共有行為:輪子發(fā)動機共有特征:卸貨拉貨各自行為:載重貨艙各自特征:停靠站報站各自行為:載客量客艙各自特征:他們共有的特征來自汽車有什么共同特征呢?卡車 公共汽車

3、繼承概述2-1繼承:在 C# 中,類可以繼承自另一個類。衍生的類(子類)繼承父類的方法和數(shù)據(jù)成員子類繼承父類,父類派生子類父類又叫基類子類又叫派生類Employee PM SE 子類 父類 class 子類 : 父類 繼承概述2-2繼承是面向?qū)ο蟮囊粋€重要特性繼承指出兩個類是“A 是 B”關(guān)系繼承在類圖中的表示自己特有的成員繼承父類的成員繼承需要符合的關(guān)系:is-aSE is a Employee繼承的實際應(yīng)用3-1部門所有人都自我介紹SayHi()SE 大家好,我是 XX, 今年 XX歲,工號是 XX,我的人氣值高達 XX!PM 大家好,我是 XX ,今年 XX歲,項目管理經(jīng)驗 XX年。子類

4、特有屬性子類中訪問繼承父類的公共屬性繼承的實際應(yīng)用3-2SE類和PM類都繼承Employee父類子類構(gòu)造函數(shù)設(shè)置公共屬性和特有屬性public class PM:Employeepublic class SE:Employeepublic SE(string id, string name, int age, Gender gender,int popularity) this.ID = id; this.Name = name; this.Age = age; this.Gender = gender; this.Popularity = popularity;繼承自父類的公共屬性子類擴展的

5、屬性實現(xiàn)繼承繼承的實際應(yīng)用3-3子類特有的SayHi()方法實例化對象調(diào)用SayHi()public string SayHi() /SE的SayHipublic string SayHi() /PM的SayHi/實例化一個程序員對象SE engineer = new SE(112, 艾邊成, 25, Gender.male, 100);Console.WriteLine(engineer.SayHi();/實例化一個PM對象PM pm = new PM(890,蓋茨,50,Gender.female,50);Console.WriteLine(pm.SayHi();SE調(diào)用自己的SayHi(

6、) PM調(diào)用自己的SayHi() 演示示例:使用繼承實現(xiàn)問好base調(diào)用父類成員關(guān)鍵字base的作用調(diào)用父類的屬性和方法public string SayHi() string message = string.Format( 大家好,我是 0, 今年 1歲,工號是 2,我的人氣值高達 3!, base.Name, base.Age, base.ID, this.Popularity); return message;調(diào)用父類的屬性protected訪問修飾符如何讓父類中的某個成員只允許其子類訪問protected訪問修飾符只允許繼承它的子類訪問 父類成員public修飾子類繼承并可以訪問pr

7、ivate修飾子類無法訪問演示示例:protected訪問修飾符類內(nèi)部子類其他類public可以可以可以private可以不可以不可以protected可以可以不可以揭秘子類構(gòu)造函數(shù)構(gòu)造子類對象,父類做了什么?base關(guān)鍵字:顯示調(diào)用父類構(gòu)造函數(shù)演示示例:斷點追蹤實例化對象過程public SE(string id,string name,int age, Gender gender, int popularity) : base(id, age, name, gender) this.Popularity = popularity;顯示調(diào)用父類的構(gòu)造函數(shù)公共屬性在父類構(gòu)造函數(shù)中初始化,代碼簡

8、潔、冗余少演示示例:使用base指定調(diào)用父類構(gòu)造函數(shù)public SE(string id, string name, int age, Gender gender,int popularity) this.ID = id; . this.Popularity = popularity;base()隱式調(diào)用父類構(gòu)造函數(shù)常見錯誤2-1class Student:Person public Student(int age, string name, string hobby) :base(int age, string name) this.Hobby = hobby; 調(diào)用父類構(gòu)造函數(shù):傳遞參數(shù)

9、編譯錯誤常見錯誤2-2class Person public Person(int age, string name) this.Age = age; this.Name = name; public int Age get; set; public string Name get; set; class Student:Person public Student(int age, string name, string hobby) this.Age = age; this.Name = name; this.Hobby = hobby; base()父類要提供無參的構(gòu)造函數(shù)如果父類沒有無參

10、的構(gòu)造函數(shù)子類構(gòu)造函數(shù)必須指明調(diào)用父類哪個構(gòu)造函數(shù)指導模擬汽車行駛訓練要點繼承base關(guān)鍵字需求說明控制臺程序?qū)崿F(xiàn)汽車與卡車的繼承汽車類Vehicle有VehicleRun ()方法, 輸出“汽車在行駛!”卡車類Truck有TruckRun()方法,輸出“型號為XX、產(chǎn)地為XX的卡車在行駛!”實例化一個卡車調(diào)用汽車和卡車的方法指導模擬汽車行駛實現(xiàn)思路創(chuàng)建Vehicle,并添加屬性“類型”和“產(chǎn)地”以及構(gòu)造函數(shù)Vehicle類添加方法VehicleRun()創(chuàng)建Truck類繼承Vehicle,添加構(gòu)造函數(shù)Truck類添加方法TruckRun()編寫測試方法完成時間:15分鐘繼承的傳遞性汽車雙層

11、單層 小型卡車 重型卡車 同樣具有汽車的特征繼承的傳遞性卡車公共汽車還可以派生更多的類型繼承的傳遞性添加一個微型卡車類public class SmallTruck : Truck public void SmallTruckRun() Console.WriteLine(微型卡車在行駛!); static void Main(string args) SmallTruck smalltruck = new SmallTruck(); smalltruck.VehicleRun(); smalltruck.TruckRun(); smalltruck.SmallTruckRun(); publ

12、ic class Truck : Vehicle繼承關(guān)系父類的父類成員父類的成員傳遞性繼承單根性public class CharmingPerson : SE, Musician編譯錯誤C#中子類不能繼承多個父類CharmingPerson 軟件工程師 音樂家 某類人是否可以這樣描述?具有兩種人的特征軟件開發(fā)中繼承的妙處模擬現(xiàn)實世界的關(guān)系便于重用和擴展已徹底測試的代碼,且無需修改結(jié)構(gòu)更清晰SE人氣值Employee姓名年齡子類更加關(guān)注與子類相關(guān)的行為和狀態(tài)共有屬性由父類負責IS-A的應(yīng)用實現(xiàn)多個員工逐個問好(包括SE和PM)子類 is-a 父類,子類可以加入父類類型的泛型集合ListSE a

13、i = new SE(112, 艾邊成, 25, Gender.male, 100);List empls = new List();empls.Add(ai);if (empls0 is SE) SE se = (SE)empls0; Console.WriteLine(se.SayHi();演示示例:is a的應(yīng)用is檢查類型指導實現(xiàn)工作匯報訓練要點繼承構(gòu)造函數(shù)IS-A需求說明PM類和SE類均繼承Employee,公共屬性在父類構(gòu)造函數(shù)中初始化實現(xiàn)不同員工匯報工作方法DoWork()SE通過遍歷工作項,輸出工作信息PM輸出固定工作信息指導實現(xiàn)工作匯報難點分析Job類定義工作項SE和PM繼承

14、員工類DoWork()方法是子類特有的方法完成時間:25分鐘擴展的麻煩添加對象后遍歷泛型集合List empls = new List();foreach(Employee empl in empls) if (empl is SE) Console.WriteLine(SE)empl).SayHi(); if(empl is PM) Console.WriteLine(PM)empl).SayHi(); 進行判斷對象類型調(diào)用相應(yīng)類的SayHi()添加多個不同的子類,SayHi()都不同,增加代碼復(fù)雜度如何解決? 巧妙減少判斷冗余修改Employee類修改子類SayHi()方法去除子類類型判斷

15、public virtual string SayHi() string message = string.Format(大家好!); return message;添加SayHi()方法 用關(guān)鍵字修飾 foreach(Employee empl in empls) Console.WriteLine(empl.SayHi(); public override string SayHi() 用關(guān)鍵字修飾 這種方式實現(xiàn)了面向?qū)ο蟮亩鄳B(tài) 簡化了代碼維護 生活中的多態(tài)Cut.!聽到這個聲音他們會做什么?剪斷頭發(fā)切開皮膚停止表演不同對象對于同一個方法(Cut)實現(xiàn)不同的行為 理發(fā)師 外科醫(yī)生 演員 什

16、么是多態(tài)多態(tài):指兩個或多個屬于不同類的對象,對同一個消息(方法調(diào)用)作出不同響應(yīng)的能力同一個類在不同場合下表現(xiàn)出不同的行為特征PM對象和SE對象SayHi()的內(nèi)容不同 Employee SE PM Employee類,在這兩種場合的行為不同重寫虛方法實現(xiàn)多態(tài)2-1方法重寫:子類重寫父類方法public class Employee public virtual string SayHi() string message = string.Format(大家好!); return message; public class SE:Employee public override string

17、SayHi() 重寫方法名、參數(shù)列表、返回值一樣,提供不同的實現(xiàn)virtual關(guān)鍵字表示虛方法override關(guān)鍵字實現(xiàn)方法重寫1重寫虛方法實現(xiàn)多態(tài)2-2方法調(diào)用:2Employee ema = new SE(210,Ema,33,Gender.female,100);Console.WriteLine(ema.SayHi();定義父類變量,創(chuàng)建子類對象foreach(Employee empl in empls) Console.WriteLine(empl.SayHi(); 根據(jù)實際創(chuàng)建的對象類型,決定執(zhí)行哪個方法。呈現(xiàn)多態(tài)性!演示示例:重寫虛方法實現(xiàn)多態(tài)練習多態(tài)實現(xiàn)工作匯報需求說明去除冗余的判斷,實現(xiàn)不同員工匯報工作完成時間:15分鐘共性問題集中講解常見調(diào)試問題及解決辦法代碼規(guī)范問題共性問題集中講解指導計算器訓練要點理解多態(tài)虛方法方法重寫需求分析使用多態(tài)實現(xiàn)計算機器指導計算器實現(xiàn)思路創(chuàng)建父類Operation屬性NumberA和NumberB虛方法GetResult()依次創(chuàng)建子類Opeartio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論