第七章多態(tài)重寫協(xié)議_第1頁
第七章多態(tài)重寫協(xié)議_第2頁
第七章多態(tài)重寫協(xié)議_第3頁
第七章多態(tài)重寫協(xié)議_第4頁
第七章多態(tài)重寫協(xié)議_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章多態(tài)、方法重寫、協(xié)議2回顧在objective-C中,一個類可不可以繼承自多個類?不可以繼承的主要作用是?實現(xiàn)代碼的重用在objective-C中,訪問修飾符一共有幾種?各是哪些?3種:@private@protected@public默認不寫時,相當(dāng)于哪一種訪問修飾符?@protected3回顧類別的主要作用?1.為原類添加方法2.將類的實現(xiàn)分散到多個不同文件中去,便于代碼管理。一個類可以有幾個類別?一個類可以有任意多個類別。類別可不可以給類添加成員屬性?它只能為類添加方法,不能為類添加成員屬性!4本章任務(wù)

掌握多態(tài)、協(xié)議的概念及其具體使用。理解方法的重寫5本章目標

理解什么是多態(tài)理解和掌握方法的重寫理解協(xié)議的概念掌握如何編制協(xié)議6多態(tài)在面向?qū)ο蟮牡谝徽轮?,我們講過多態(tài)的概念。多態(tài)即:不同的對象對同一個事件有不同的反應(yīng)。同樣都叫做繪圖,但繪制矩形和繪制圓不一樣。繪制矩形需要知長,寬,坐標位置,需要用直尺來繪制;繪制圓需知道圓心位置,圓半徑,需要用圓規(guī)來繪制。這就是“多態(tài)”。不同對象對同一名稱的操作有不同處理方式。7多態(tài)再看一個多態(tài)的例子:彩色打印機

打印機

黑白打印機打印效果:彩色打印效果:黑白打印

打印

同樣都是作“打印”的工作。若是彩色打印機則會打出彩色效果,若是黑白打印機則會出黑白效果,這就是多態(tài)。多態(tài)的具體表現(xiàn)多態(tài)在objective-C中主要表現(xiàn)為方法的重寫和協(xié)議。1重寫(發(fā)生在父類和子類之間)這是不同的事物對同一個事件有不同的反應(yīng)。打印機有打印的方法,但不同的打印機打印效果不一樣。重寫在程序里體現(xiàn)在父類和子類之間。父類有一個方法,當(dāng)子類也擁有父類相同的方法時這就叫重寫(方法名相同,參數(shù)相同,返回類型也相同)。2協(xié)議協(xié)議是多個類共享的一個方法列表。協(xié)議中列出的方法沒有相應(yīng)的實現(xiàn),由其它類來實現(xiàn)。方法的重寫在繼承關(guān)系中,若子類中某方法的方法名,參數(shù),返回值與父類某方法相同,則稱為方法的重寫現(xiàn)在在我們之前做的汽車類中,添加一個展示自身的方法show:。我們希望當(dāng)不同的汽車展示自身時,會有不同的展示效果。用方法重寫具體實現(xiàn)如下:1.在Car.h中添加show:方法聲明:2.在Car.m中添加show:方法實現(xiàn):3.在Car的兩個子類頭文件中(Cooper.h和Truck.h)添加show:方法聲明:方法的重寫4.在Car的兩個子類實現(xiàn)文件中(Cooper.m和Truck.m)添加各自的show:方法實現(xiàn):在Cooper.m中在Truck.m中兩種車的show:方法實現(xiàn)不一樣4.最后在main.m中添加如下代碼:同樣都是用show:方法,運行效果一樣嗎?方法的重寫在父類、子類中都定義了show:方法,到底調(diào)用哪一個show:方法,由具體生成的對象決定。若生成的對象是父類,則調(diào)用父類的show:是子類對象則調(diào)用子類的show:。這就是方法重寫,是多態(tài)的體現(xiàn)之一。來看一個特殊的情況:這稱為“父類的引用指向子類的對象”。是正確的。最后仍然調(diào)用的是子類Cooper中的方法show:。注意!不允許子類的引用指向父類的對象:

這樣寫有錯嗎?運行結(jié)果是什么?正確錯誤!Cooper*car=[Caralloc]init];接口、協(xié)議在現(xiàn)實生活中,很多地方都體現(xiàn)了接口的概念:聲卡聲卡、網(wǎng)卡、顯卡的結(jié)構(gòu)、功能都不相同,但它們都屬于PCI卡,因此它們都可以插在主板PCI插槽上。顯卡網(wǎng)卡主板只要是PCI標準接口卡就可以插在此主板上正常工作“PCI標準”就是接口接口、協(xié)議另例:能插在交流電源上的電器必須是交流電電器;符合某幾種規(guī)格大小的紙才能用在某打印機上;符合一系列指標要求的的人才算是身體健康的人;符合哪些特征的才稱為昆蟲。。。等等。綜述起來,接口其實就是我們現(xiàn)實生活中“標準”的意思。即必須要符合某些規(guī)范或要求,才被認為是某事物或才有資格做某事。落實到程序中,通俗的說,接口就是一個模版,在此模版中寫好了一系列空方法。以后在創(chuàng)建類時,旦凡想成為有我接口名號的類,必須符合我的標準,那就是實現(xiàn)我模版中列出的所有空方法,這樣的類才算是屬于我接口旗下的類。在objective-C中,“協(xié)議”其實就是我們這里所談的接口,它是一個方法模版,在它名下的任何子類都必須實現(xiàn)它列出的所有空方法。接口、協(xié)議多態(tài)的另一體現(xiàn)也就是協(xié)議。比如說,都叫交流電器,交流電電視機和交流電洗衣機它們的功能作用就完全不一樣。這就體現(xiàn)了多態(tài)性。那協(xié)議的存在最終有什么意義呢?不要這個方法的標準模版,程序不是一樣的可編制出來嗎?試想一下,正因為這兩樣電器都符合交流電器這個標準,我們就可以對它們做一些相同的操作了。比如我可以把它們都插在交流電源上,讓它們工作。甚至以后只要我聽到某電器是交流電器,那么不管它有什么功能,總之我能確定一點,那就是它一定能插在交流電源上。“可以讓子類們以后被

當(dāng)成同一類事物看待;

它們都能做此協(xié)議規(guī)定的事”這就是使用協(xié)議的好處。都能插在交流電源上15協(xié)議現(xiàn)在在我們之前做的汽車類基礎(chǔ)上,添加一個協(xié)議:維修(Repair)。我們希望不論是什么種類的汽車,若壞了都可以被維修工修理。先看看定義協(xié)議的語法:1.使用@protocol指令,之后設(shè)定協(xié)議名稱,然后就可以聲明一些方法,最后以@end結(jié)束: @protocol

協(xié)議名稱 -(void)newMethod;//方法聲明 @end2.然后就可以在要實現(xiàn)協(xié)議的類文件中引入?yún)f(xié)議:@interface類名:NSObject<協(xié)議名稱>{……3.最后在該類的實現(xiàn)文件中實現(xiàn)協(xié)議所聲明的方法:-(void)newMethod{……//該方法的具體實現(xiàn)}注意要放在一對尖括號中16協(xié)議2.在汽車類Car.h文件中,引入?yún)f(xié)議:給汽車類添加維修Repair協(xié)議的具體做法如下:1.在Xcode中創(chuàng)建Repair.h協(xié)議文件,在其中加上如下代碼:3.在汽車類Car.m文件中,實現(xiàn)協(xié)議所聲明的方法:17協(xié)議4.協(xié)議編程完成。最后在main.m中試驗一下效果:運行結(jié)果:為了更好的說明使用協(xié)議的好處,我們增加一個修理工類,他專門負責(zé)修理汽車。設(shè)想一下沒有使用協(xié)議的情況:如果我們要讓他既能修寶馬車,又能修卡車,我們往往會想到在修理工類中添加兩個修理方法,一個專門用來修寶馬車,一個專門用來修卡車:那要是以后系統(tǒng)還要添加新的汽車怎么辦?那只有每次都在修理工類中再增加一個專門的修理新汽車的方法了。有多少新汽車,就要寫多少修理方法,非常的不方便。有沒有更好的辦法呢?我們來看看協(xié)議能否幫助解決這個問題:18協(xié)議我們增加一個修理工類,在.h文件中聲明如下修理方法:可理解為:修理工只能修符合Repair協(xié)議標準的汽車在修理工.m文件中實現(xiàn)該修理方法:以后只要是遵循了<Repair>協(xié)議的汽車,都能交給該維修工進行修理了。符合Repair協(xié)議的汽車都一定有修引擎和修輪胎的方法這樣,不管以后添加多少種新汽車,只要它實現(xiàn)了Repair協(xié)議,都可以交給此工人修了!修理工類中只需要這一個

repair:方法就能匹配所有的汽車。代碼演示:使用協(xié)議的好處19總結(jié)什么是多態(tài)?多態(tài)即不同的對象對同一個事件有不同的反應(yīng)。在objective-C中哪些地方體現(xiàn)了多態(tài)?方法的重寫、協(xié)議什么是方法的重寫?在繼承關(guān)系中,若子類中某方法的方法名,參數(shù),返回值與父類某方法相同,則稱為方法的重寫定義協(xié)議的格式?@protocol

協(xié)議名稱-(void)newMethod;//方法聲明@end@interface類名:NSObject<協(xié)議名稱>{ ……20課后作業(yè)根據(jù)課堂演示,為Car及其子類Cooper、Truck添加方法show:,實現(xiàn)方法重寫。給汽車類添加協(xié)議Repair,協(xié)議中含修理發(fā)動機repairEngine:,修理輪胎repairTire:兩個方法,并讓Car實現(xiàn)這兩個方法。添加修理工類Worker,為其添加修理方法repair:,讓他能修理凡是實現(xiàn)了Repair協(xié)

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論