面向?qū)ο?mdash;—多態(tài).ppt_第1頁(yè)
面向?qū)ο?mdash;—多態(tài).ppt_第2頁(yè)
面向?qū)ο?mdash;—多態(tài).ppt_第3頁(yè)
面向?qū)ο?mdash;—多態(tài).ppt_第4頁(yè)
面向?qū)ο?mdash;—多態(tài).ppt_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、面向?qū)ο蠖鄳B(tài),姚曉玲,理解多態(tài)的概念 理解抽象方法和抽象類 理解虛方法與抽象方法的區(qū)別,本章目標(biāo),回顧繼承,Person類,老師,學(xué)生,SayHi(),SayHi(),繼承,List,SayHi(),遍歷List,循環(huán)SayHi(),內(nèi)容不同,將所有人都存入集合,調(diào)用兩種類型的SayHi方法,演示示例 把對(duì)象存入泛型集合List遍歷的麻煩,擴(kuò)展的麻煩,for (int i = 0; i person.Count; i+) if (personi is Student) (Student)personi).StuSayHi(); else if (personi is Teacher) (Tea

2、cher)personi).TeachSayHi(); ,進(jìn)行判斷對(duì)象類型,調(diào)用相應(yīng)類的SayHi(),添加多個(gè)不同的子類,SayHi都不同增加代碼復(fù)雜度如何解決?,添加對(duì)象后遍歷泛型集合,巧妙的做法,abstract class Person public abstract void SayHi(); ,for(int i = 0; i person.Count; i+) personi.SayHi(); ,這種方式實(shí)現(xiàn)了面向?qū)ο蟮亩鄳B(tài),修改Person類,添加一個(gè)未實(shí)現(xiàn)的方法,用關(guān)鍵字修飾,演示示例添加抽象方法實(shí)現(xiàn)多態(tài),去除子類類型判斷,生活中的多態(tài),Cut.!,聽到這個(gè)聲音他們會(huì)做什么?

3、,剪斷頭發(fā),切開皮膚,停止表演,不同對(duì)象對(duì)于同一個(gè)方法(Cut)調(diào)用的不同行為。,理發(fā)師,外科醫(yī)生,演員,什么是多態(tài),指不同對(duì)象收到相同消息時(shí),會(huì)產(chǎn)生不同行為,Student和Teacher類SayHi的內(nèi)容不同,同一個(gè)類在不同的場(chǎng)合下表現(xiàn)出不同的行為特征,Person,Student,Teacher,Person類,在這兩種場(chǎng)合的行為不同,抽象類和抽象方法,abstract class Person public abstract void SayHi(); ,抽象方法,一個(gè)沒有實(shí)現(xiàn)的方法,有抽象方法的類必然是抽象類,抽象類用來列舉一個(gè)類所需要的行為 抽象類不明確提供具體實(shí)現(xiàn)方法 抽象類必須

4、由其子類實(shí)現(xiàn)它的抽象方法(除非子類也具有抽象性),常見錯(cuò)誤,抽象類不能被實(shí)例化,抽象類不能是密封或靜態(tài)的,Person person = new Person();,編譯錯(cuò)誤,抽象類不能用 sealed和static修飾,實(shí)現(xiàn)抽象方法,使用override實(shí)現(xiàn)抽象方法,public override void SayHi() /具體實(shí)現(xiàn)內(nèi)容 ,重寫,實(shí)現(xiàn)抽象方法,Dog : Animal,Cat : Animal,抽象類的應(yīng)用場(chǎng)合,abstract Animal,抽象類和抽象方法實(shí)現(xiàn)多態(tài)性 父類提供一系列規(guī)定, 約束子類的行為 父類可以提供一些共性的行為,貓咪喵喵叫,狗狗汪汪叫,abstrac

5、t 叫(),是動(dòng)物就要會(huì)叫,里氏替換原則,/ Student stu1 = new Student(); Student stu2 = new Student(); List person = new List(); person.Add(stu1); person.Add(stu2); /,子類對(duì)象可以替換父類,里氏替換原則(LSP),子類的對(duì)象能夠替換其父類 父類對(duì)象不能夠替換子類 父類的方法都要在子類中實(shí)現(xiàn)或者重寫,is與as操作符,is 檢查對(duì)象是否與指定類型兼容,if (personi is Student),判斷person集合的元素是否是Student對(duì)象,as 用于在兼容的引用

6、類型之間執(zhí)行轉(zhuǎn)換,for (int i = 0; i Students.Count; i+) Student stu = Studentsi as Student; Console.WriteLine(stu.Name); ,轉(zhuǎn)換失敗返回值為空,一種類型轉(zhuǎn)換方式,小結(jié),利用多態(tài)性編寫這三種職業(yè)聽到“cut”時(shí)的行為,為什么需要虛方法,大家好,我是某某先生(女士),今年多少歲,抽象方法不能在父類實(shí)現(xiàn),學(xué)生,大家好,我是某某同學(xué),今年多少歲,喜歡什么,老師,大家好,我是某某老師,今年多少歲,工作幾年了,提供一個(gè)通用的方式,學(xué)生和老師也可以使用通用方式 默認(rèn)SayHi能否寫在Person類中? 各子類可以重寫不同行為SayHi。,可以使用虛方法實(shí)現(xiàn),使用虛方法,/person類中默認(rèn)實(shí)現(xiàn)通用的SayHi public virtual void SayHi() /省略具體實(shí)現(xiàn) ,虛方法,演示示例虛方法,用默認(rèn)的SayHi的對(duì)象,子類中不需要重寫SayHi 用自己的SayHi子類中要重寫SayHi,同樣使用override重寫,虛方法與抽象方法,面向?qū)ο蟮娜筇匦?隱藏內(nèi)部實(shí)現(xiàn),穩(wěn)定外部接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論