第七章多態(tài)重寫協(xié)議_第1頁(yè)
第七章多態(tài)重寫協(xié)議_第2頁(yè)
第七章多態(tài)重寫協(xié)議_第3頁(yè)
第七章多態(tài)重寫協(xié)議_第4頁(yè)
第七章多態(tài)重寫協(xié)議_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

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

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

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

打印機(jī)

黑白打印機(jī)打印效果:彩色打印效果:黑白打印

打印

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

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

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

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

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

repair:方法就能匹配所有的汽車。代碼演示:使用協(xié)議的好處19總結(jié)什么是多態(tài)?多態(tài)即不同的對(duì)象對(duì)同一個(gè)事件有不同的反應(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:,實(shí)現(xiàn)方法重寫。給汽車類添加協(xié)議Repair,協(xié)議中含修理發(fā)動(dòng)機(jī)repairEngine:,修理輪胎repairTire:兩個(gè)方法,并讓Car實(shí)現(xiàn)這兩個(gè)方法。添加修理工類Worker,為其添加修理方法repair:,讓他能修理凡是實(shí)現(xiàn)了Repair協(xié)

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論