初識(shí)繼承和多態(tài)--第五章_第1頁(yè)
初識(shí)繼承和多態(tài)--第五章_第2頁(yè)
初識(shí)繼承和多態(tài)--第五章_第3頁(yè)
初識(shí)繼承和多態(tài)--第五章_第4頁(yè)
初識(shí)繼承和多態(tài)--第五章_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章初識(shí)繼承和多態(tài)初識(shí)繼承和多態(tài)回顧與作業(yè)點(diǎn)評(píng)回顧與作業(yè)點(diǎn)評(píng) 使用使用new實(shí)例化對(duì)象時(shí),調(diào)用了什么?實(shí)例化對(duì)象時(shí),調(diào)用了什么? 說(shuō)出方法重載的幾個(gè)特點(diǎn)?說(shuō)出方法重載的幾個(gè)特點(diǎn)?預(yù)習(xí)檢查預(yù)習(xí)檢查 子類中調(diào)用父類成員的關(guān)鍵字是什么?子類中調(diào)用父類成員的關(guān)鍵字是什么? 重寫(xiě)父類方法使用什么關(guān)鍵字?重寫(xiě)父類方法使用什么關(guān)鍵字?本章任務(wù)本章任務(wù) 使用繼承和多態(tài)使用繼承和多態(tài) 實(shí)現(xiàn)模擬汽車行駛實(shí)現(xiàn)模擬汽車行駛 實(shí)現(xiàn)員工匯報(bào)工作實(shí)現(xiàn)員工匯報(bào)工作 實(shí)現(xiàn)計(jì)算器實(shí)現(xiàn)計(jì)算器 理解繼承的概念理解繼承的概念 能夠利用繼承建立父類和子類能夠利用繼承建立父類和子類 理解多態(tài)的概念理解多態(tài)的概念 會(huì)重寫(xiě)虛方法實(shí)現(xiàn)多態(tài)會(huì)重

2、寫(xiě)虛方法實(shí)現(xiàn)多態(tài)本章目標(biāo)本章目標(biāo)代碼冗余代碼冗余 對(duì)比兩個(gè)類對(duì)比兩個(gè)類PM、SE 加入加入CEO類,具有這些相同的屬性類,具有這些相同的屬性年齡、性別、姓年齡、性別、姓名等是重復(fù)的名等是重復(fù)的如何共用重復(fù)代碼?如何共用重復(fù)代碼?提取冗余代碼提取冗余代碼將公共的成員放將公共的成員放到一個(gè)類中到一個(gè)類中保留自己特有保留自己特有的成員的成員保留自己特有保留自己特有的成員的成員提取后的應(yīng)用提取后的應(yīng)用class SE:Employee public SE(string id, string name, int age, Gender gender,int popularity) this.ID = i

3、d; this.Name = name; this.Age = age; this.Gender = gender; this.Popularity = popularity; / 人氣值人氣值 public int Popularity get; set; .只有特有的屬性只有特有的屬性公共屬性仍可訪問(wèn)公共屬性仍可訪問(wèn)繼承繼承卡車和巴士都是汽車卡車和巴士都是汽車 生活中的繼承生活中的繼承汽車汽車 剎車剎車行駛行駛共有行為:共有行為:輪子輪子發(fā)動(dòng)機(jī)發(fā)動(dòng)機(jī)共有特征:共有特征:卸貨卸貨拉貨拉貨各自行為:各自行為:載重載重貨艙貨艙各自特征:各自特征:??空就?空緢?bào)站報(bào)站各自行為:各自行為:載客量載客

4、量客艙客艙各自特征:各自特征:他們共有的特征他們共有的特征來(lái)自汽車來(lái)自汽車有什么共同有什么共同特征呢?特征呢?卡車卡車 公共汽車公共汽車 繼承概述繼承概述2-1 繼承:繼承: 在在 C# 中,類可以繼承自另一個(gè)類。衍生的類(子類)繼承父中,類可以繼承自另一個(gè)類。衍生的類(子類)繼承父類的方法和數(shù)據(jù)成員類的方法和數(shù)據(jù)成員 子類繼承父類,父類派生子類子類繼承父類,父類派生子類 父類又叫父類又叫基類基類 子類又叫子類又叫派生類派生類Employee PM SE 子類子類 父類父類 class 子類子類 : 父類父類 繼承概述繼承概述2-2 繼承是面向?qū)ο蟮囊粋€(gè)重要特性繼承是面向?qū)ο蟮囊粋€(gè)重要特性 繼

5、承指出兩個(gè)類是繼承指出兩個(gè)類是“A 是是 B”關(guān)系關(guān)系繼承在類圖中繼承在類圖中的表示的表示自己特有的自己特有的成員成員繼承父繼承父類的成類的成員員繼承需要符合的關(guān)系:繼承需要符合的關(guān)系:is-aSE is a Employee繼承的實(shí)際應(yīng)用繼承的實(shí)際應(yīng)用3-1部門所有人都自我介紹部門所有人都自我介紹SayHi()SE 大家好,我是大家好,我是 XX, 今年今年 XX歲,工號(hào)是歲,工號(hào)是 XX,我的人氣值高達(dá),我的人氣值高達(dá) XX!PM 大家好,我是大家好,我是 XX ,今年,今年 XX歲,項(xiàng)目管理經(jīng)驗(yàn)歲,項(xiàng)目管理經(jīng)驗(yàn) XX年。年。子類特有屬性子類特有屬性子類中訪問(wèn)繼承父類子類中訪問(wèn)繼承父類的公

6、共屬性的公共屬性繼承的實(shí)際應(yīng)用繼承的實(shí)際應(yīng)用3-2 SE類和類和PM類都繼承類都繼承Employee父類父類 子類構(gòu)造函數(shù)設(shè)置公共屬性和特有屬性子類構(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 = po

7、pularity;繼承自父類的公共屬性繼承自父類的公共屬性子類擴(kuò)展的屬性子類擴(kuò)展的屬性實(shí)現(xiàn)繼承實(shí)現(xiàn)繼承繼承的實(shí)際應(yīng)用繼承的實(shí)際應(yīng)用3-3 子類特有的子類特有的SayHi()方法方法 實(shí)例化對(duì)象調(diào)用實(shí)例化對(duì)象調(diào)用SayHi()public string SayHi() /SE的的SayHipublic string SayHi() /PM的的SayHi/實(shí)例化一個(gè)程序員對(duì)象實(shí)例化一個(gè)程序員對(duì)象SE engineer = new SE(112, 艾邊成艾邊成, 25, Gender.male, 100);Console.WriteLine(engineer.SayHi();/實(shí)例化一個(gè)實(shí)例化一個(gè)P

8、M對(duì)象對(duì)象PM pm = new PM(890,蓋茨蓋茨,50,Gender.female,50);Console.WriteLine(pm.SayHi();SE調(diào)用自己的調(diào)用自己的SayHi() PM調(diào)用自己的調(diào)用自己的SayHi() 演示示例:使用繼承實(shí)現(xiàn)問(wèn)好演示示例:使用繼承實(shí)現(xiàn)問(wèn)好base調(diào)用父類成員調(diào)用父類成員 關(guān)鍵字關(guān)鍵字base的作用的作用 調(diào)用父類的屬性和方法調(diào)用父類的屬性和方法public string SayHi() string message = string.Format( 大家好,我是大家好,我是 0, 今年今年 1歲,工號(hào)是歲,工號(hào)是 2,我的人氣值高達(dá),我的人氣

9、值高達(dá) 3!, base.Name, base.Age, base.ID, this.Popularity); return message;調(diào)用父類的調(diào)用父類的屬性屬性protected訪問(wèn)修飾符訪問(wèn)修飾符 如何讓父類中的某個(gè)成員只允許其子類訪問(wèn)如何讓父類中的某個(gè)成員只允許其子類訪問(wèn)protected訪問(wèn)修飾符只允許繼承它的子類訪問(wèn)訪問(wèn)修飾符只允許繼承它的子類訪問(wèn) 父類成員父類成員public修飾修飾子類繼承并可子類繼承并可以訪問(wèn)以訪問(wèn)private修飾修飾子類無(wú)法訪問(wèn)子類無(wú)法訪問(wèn)演示示例:演示示例:protected訪問(wèn)修飾符訪問(wèn)修飾符類內(nèi)部類內(nèi)部子類子類其他類其他類public可以可以可

10、以可以可以可以private可以可以不可以不可以不可以不可以protected可以可以可以可以不可以不可以揭秘子類構(gòu)造函數(shù)揭秘子類構(gòu)造函數(shù) 構(gòu)造子類對(duì)象,父類做了什么?構(gòu)造子類對(duì)象,父類做了什么? base關(guān)鍵字:顯示調(diào)用父類構(gòu)造函數(shù)關(guān)鍵字:顯示調(diào)用父類構(gòu)造函數(shù)演示示例:斷點(diǎn)追蹤實(shí)例化對(duì)象過(guò)程演示示例:斷點(diǎn)追蹤實(shí)例化對(duì)象過(guò)程public SE(string id,string name,int age, Gender gender, int popularity) : base(id, age, name, gender) this.Popularity = popularity;顯示調(diào)用父類

11、的顯示調(diào)用父類的構(gòu)造函數(shù)構(gòu)造函數(shù)公共屬性在父類構(gòu)造函數(shù)中初始化,公共屬性在父類構(gòu)造函數(shù)中初始化,代碼簡(jiǎn)潔、冗余少代碼簡(jiǎn)潔、冗余少演示示例:使用演示示例:使用base指定調(diào)用父類構(gòu)造函數(shù)指定調(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)用父隱式調(diào)用父類構(gòu)造函數(shù)類構(gòu)造函數(shù)常見(jiàn)錯(cuò)誤常見(jiàn)錯(cuò)誤2-1class Student:Person public Student(int age

12、, string name, string hobby) :base(int age, string name) this.Hobby = hobby; 調(diào)用父類構(gòu)造函調(diào)用父類構(gòu)造函數(shù):傳遞參數(shù)數(shù):傳遞參數(shù)編譯錯(cuò)誤編譯錯(cuò)誤常見(jiàn)錯(cuò)誤常見(jiàn)錯(cuò)誤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 a

13、ge, string name, string hobby) this.Age = age; this.Name = name; this.Hobby = hobby; base()父類要提供無(wú)參的構(gòu)父類要提供無(wú)參的構(gòu)造函數(shù)造函數(shù)如果父類沒(méi)有無(wú)參的構(gòu)造函數(shù)如果父類沒(méi)有無(wú)參的構(gòu)造函數(shù)子類構(gòu)造函數(shù)必須指明調(diào)用父類哪個(gè)構(gòu)造函數(shù)子類構(gòu)造函數(shù)必須指明調(diào)用父類哪個(gè)構(gòu)造函數(shù)指導(dǎo)指導(dǎo)模擬汽車行駛模擬汽車行駛 訓(xùn)練要點(diǎn)訓(xùn)練要點(diǎn) 繼承繼承 base關(guān)鍵字關(guān)鍵字 需求說(shuō)明需求說(shuō)明 控制臺(tái)程序?qū)崿F(xiàn)汽車與卡車的繼承控制臺(tái)程序?qū)崿F(xiàn)汽車與卡車的繼承 汽車類汽車類Vehicle有有VehicleRun ()方法,方法, 輸出

14、輸出“汽車在行駛!汽車在行駛!” 卡車類卡車類Truck有有TruckRun()方法,輸出方法,輸出“型號(hào)為型號(hào)為XX、產(chǎn)地為、產(chǎn)地為XX的的卡車在行駛!卡車在行駛!” 實(shí)例化一個(gè)卡車調(diào)用汽車和卡車的方法實(shí)例化一個(gè)卡車調(diào)用汽車和卡車的方法指導(dǎo)指導(dǎo)模擬汽車行駛模擬汽車行駛 實(shí)現(xiàn)思路實(shí)現(xiàn)思路 創(chuàng)建創(chuàng)建Vehicle,并添加屬性,并添加屬性“類型類型”和和“產(chǎn)地產(chǎn)地”以及構(gòu)造函數(shù)以及構(gòu)造函數(shù) Vehicle類添加方法類添加方法VehicleRun() 創(chuàng)建創(chuàng)建Truck類繼承類繼承Vehicle,添加構(gòu)造函數(shù),添加構(gòu)造函數(shù) Truck類添加方法類添加方法TruckRun() 編寫(xiě)測(cè)試方法編寫(xiě)測(cè)試方法

15、完成時(shí)間:完成時(shí)間:15分鐘分鐘繼承的傳遞性繼承的傳遞性汽車汽車雙層雙層 單層單層 小型卡車小型卡車 重型卡車重型卡車 同樣具有汽車同樣具有汽車的特征的特征繼承的傳遞性繼承的傳遞性卡車卡車公共汽車公共汽車還可以派生還可以派生更多的類型更多的類型繼承的傳遞性繼承的傳遞性 添加一個(gè)微型卡車類添加一個(gè)微型卡車類public class SmallTruck : Truck public void SmallTruckRun() Console.WriteLine(微型卡車在行駛!微型卡車在行駛!); static void Main(string args) SmallTruck smalltruc

16、k = new SmallTruck(); smalltruck.VehicleRun(); smalltruck.TruckRun(); smalltruck.SmallTruckRun(); public class Truck : Vehicle繼承關(guān)系繼承關(guān)系父類的父類成員父類的父類成員父類的成員父類的成員傳遞性傳遞性繼承單根性繼承單根性public class CharmingPerson : SE, Musician編譯錯(cuò)誤編譯錯(cuò)誤C#中子類不能繼承多個(gè)父類中子類不能繼承多個(gè)父類CharmingPerson 軟件工程師軟件工程師 音樂(lè)家音樂(lè)家 某類人某類人是否可以這樣是否可以這樣描

17、述?描述?具有兩種人的具有兩種人的特征特征軟件開(kāi)發(fā)中繼承的妙處軟件開(kāi)發(fā)中繼承的妙處 模擬現(xiàn)實(shí)世界的關(guān)系模擬現(xiàn)實(shí)世界的關(guān)系 便于重用和擴(kuò)展已徹底測(cè)試的代碼,且無(wú)需修改便于重用和擴(kuò)展已徹底測(cè)試的代碼,且無(wú)需修改 結(jié)構(gòu)更清晰結(jié)構(gòu)更清晰SE人氣值人氣值Employee姓名姓名年齡年齡子類更加關(guān)注與子類子類更加關(guān)注與子類相關(guān)的行為和狀態(tài)相關(guān)的行為和狀態(tài)共有屬性由父類負(fù)責(zé)共有屬性由父類負(fù)責(zé)IS-A的應(yīng)用的應(yīng)用 實(shí)現(xiàn)多個(gè)員工逐個(gè)問(wèn)好(包括實(shí)現(xiàn)多個(gè)員工逐個(gè)問(wèn)好(包括SE和和PM)子類子類 is-a 父類,子類可以加入父類類型的父類,子類可以加入父類類型的泛型集合泛型集合ListSE ai = new SE(1

18、12, 艾邊成艾邊成, 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)用的應(yīng)用is檢查類型檢查類型指導(dǎo)指導(dǎo)實(shí)現(xiàn)工作匯報(bào)實(shí)現(xiàn)工作匯報(bào) 訓(xùn)練要點(diǎn)訓(xùn)練要點(diǎn) 繼承繼承 構(gòu)造函數(shù)構(gòu)造函數(shù) IS-A 需求說(shuō)明需求說(shuō)明 PM類和類和SE類均繼承類均繼承Employee,公共屬性在父類構(gòu)造函數(shù)中,公共屬性在父類構(gòu)造函數(shù)中初始化初始化 實(shí)現(xiàn)不同員工匯報(bào)工作方法實(shí)現(xiàn)不同員工匯報(bào)

19、工作方法DoWork() SE通過(guò)遍歷工作項(xiàng),輸出工作信息通過(guò)遍歷工作項(xiàng),輸出工作信息 PM輸出固定工作信息輸出固定工作信息指導(dǎo)指導(dǎo)實(shí)現(xiàn)工作匯報(bào)實(shí)現(xiàn)工作匯報(bào) 難點(diǎn)分析難點(diǎn)分析 Job類定義工作項(xiàng)類定義工作項(xiàng) SE和和PM繼承員工類繼承員工類 DoWork()方法是子類特有方法是子類特有的方法的方法完成時(shí)間:完成時(shí)間:25分鐘分鐘擴(kuò)展的麻煩擴(kuò)展的麻煩 添加對(duì)象后遍歷泛型集合添加對(duì)象后遍歷泛型集合List empls = new List();foreach(Employee empl in empls) if (empl is SE) Console.WriteLine(SE)empl).Say

20、Hi(); if(empl is PM) Console.WriteLine(PM)empl).SayHi(); 進(jìn)行判斷對(duì)象類進(jìn)行判斷對(duì)象類型型調(diào)用相應(yīng)類的調(diào)用相應(yīng)類的SayHi()添加多個(gè)不同的子類,添加多個(gè)不同的子類,SayHi()都不同都不同, ,增加代碼復(fù)雜度如何解決?增加代碼復(fù)雜度如何解決? 巧妙減少判斷冗余巧妙減少判斷冗余 修改修改Employee類類 修改子類修改子類SayHi()方法方法 去除子類類型判斷去除子類類型判斷public virtual string SayHi() string message = string.Format(大家好!大家好!); return

21、message;添加添加SayHi()方法方法 用關(guān)鍵字修飾用關(guān)鍵字修飾 foreach(Employee empl in empls) Console.WriteLine(empl.SayHi(); public override string SayHi() 用關(guān)鍵字修飾用關(guān)鍵字修飾 這種方式實(shí)現(xiàn)了面向?qū)ο蟮倪@種方式實(shí)現(xiàn)了面向?qū)ο蟮亩鄳B(tài)多態(tài) 簡(jiǎn)化了代碼維護(hù)簡(jiǎn)化了代碼維護(hù) 生活中的多態(tài)生活中的多態(tài)Cut.!聽(tīng)到這個(gè)聲音他們聽(tīng)到這個(gè)聲音他們會(huì)做什么?會(huì)做什么?剪斷頭發(fā)剪斷頭發(fā)切開(kāi)皮膚切開(kāi)皮膚停止表演停止表演不同對(duì)象對(duì)于同一個(gè)方法(不同對(duì)象對(duì)于同一個(gè)方法(Cut)實(shí)現(xiàn)不同的行為)實(shí)現(xiàn)不同的行為

22、理發(fā)師理發(fā)師 外科醫(yī)生外科醫(yī)生 演員演員 什么是多態(tài)什么是多態(tài) 多態(tài):指兩個(gè)或多個(gè)屬于不同類的對(duì)象,對(duì)同一個(gè)消息多態(tài):指兩個(gè)或多個(gè)屬于不同類的對(duì)象,對(duì)同一個(gè)消息(方法調(diào)用)作出不同響應(yīng)的能力(方法調(diào)用)作出不同響應(yīng)的能力 同一個(gè)類在不同場(chǎng)合下表現(xiàn)出不同的行為特征同一個(gè)類在不同場(chǎng)合下表現(xiàn)出不同的行為特征PM對(duì)象和對(duì)象和SE對(duì)象對(duì)象SayHi()的內(nèi)容不同的內(nèi)容不同 Employee SE PM Employee類,類,在這兩種場(chǎng)合的在這兩種場(chǎng)合的行為不同行為不同重寫(xiě)虛方法實(shí)現(xiàn)多態(tài)重寫(xiě)虛方法實(shí)現(xiàn)多態(tài)2-1方法重寫(xiě)方法重寫(xiě):子類重寫(xiě)父類方法:子類重寫(xiě)父類方法public class Employee

23、 public virtual string SayHi() string message = string.Format(大家好!大家好!); return message; public class SE:Employee public override string SayHi() 重寫(xiě)重寫(xiě)方法名、參數(shù)列表、返回值方法名、參數(shù)列表、返回值一樣,提供不同的實(shí)現(xiàn)一樣,提供不同的實(shí)現(xiàn)virtual關(guān)鍵字表關(guān)鍵字表示虛方法示虛方法override關(guān)鍵字關(guān)鍵字實(shí)現(xiàn)方法重寫(xiě)實(shí)現(xiàn)方法重寫(xiě)1重寫(xiě)虛方法實(shí)現(xiàn)多態(tài)重寫(xiě)虛方法實(shí)現(xiàn)多態(tài)2-2方法調(diào)用:方法調(diào)用:2Employee ema = new SE(210,Ema,33,Gender.female,100);Console.WriteLine(ema.SayHi();定義父類變量,定義父類變量,創(chuàng)建子類對(duì)象創(chuàng)建子類對(duì)象foreach(Employee empl in empls) Console.Wri

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論