OC-繼承與多態(tài)

思考:當(dāng)多個(gè)類,擁有部分相同的成員變量時(shí)懊烤,怎么辦爷光?

1.復(fù)制-粘貼

缺點(diǎn):當(dāng)需求有任何改動(dòng)時(shí),需要改動(dòng)的代碼量很大缓屠,很不方便。

2.繼承:@interface類名:要繼承的類名????? 目的:降低代碼冗余度


繼承的效果:子類繼承父類护侮,就無條件擁有了父類的所有成員變量


私有成員變量:寫在.m中的成員變量敌完,叫做私有成員變量,只能在本類中訪問羊初,但能被繼承


子類不可以定義與父類同名的成員變量

OC不支持多繼承滨溉,支持多層繼承


==>繼承體系中方法調(diào)用順序

1.在自己類中尋找

2.如果沒有,如父類中找

3.如果父類中沒有长赞,就去父類的父類

4.如果父類的父類還沒有晦攒,就繼續(xù)往上找,直到找到基類(NSObject)

5.如果NSObject也沒有就報(bào)錯(cuò)了


==>繼承的準(zhǔn)則

不要為了僅僅只是得到某一個(gè)類的成員而去繼承

不要為了繼承而繼承

語法上其實(shí)任意的類之間都是可以繼承的

清理得哆、邏輯上并不是任意的類之間都是可以繼承的

只有滿足isa關(guān)系對(duì)象的才可以擁有繼承關(guān)系

當(dāng)A類是一個(gè)B類的時(shí)候脯颜,這個(gè)時(shí)候A類才可以從B類去繼承

只有子類是一個(gè)父類的時(shí)候,才可以繼承


-->繼承具有傳遞性贩据。


-->new

實(shí)際上是一個(gè)定義在NSObject中的一個(gè)類方法

這個(gè)方法用來創(chuàng)建對(duì)象

所以栋操,如果我們的類想要擁有創(chuàng)建對(duì)象的能力,就必須間接或者直接的從NSObject類繼承

NSObject類中還有一個(gè)isa屬性

所以我們的對(duì)象中都有一個(gè)isa屬性


super關(guān)鍵字介紹


1.self和super

OC提供了兩個(gè)保留字self和super饱亮,用于在方法定義中引用執(zhí)行該方法的對(duì)象

OC語言中的self矾芙,就相當(dāng)于C++、Java中的this指針近上。學(xué)會(huì)使用self剔宪,首先要搞清楚屬性這一概念,以及理解getter(設(shè)置器)和setter(訪問器)方法壹无,它到底有什么用葱绒?

設(shè)置器和訪問器,供外界操作格遭,類內(nèi)部屬性的一個(gè)通道

假如哈街,沒有這個(gè)方法,外界怎么操作類的內(nèi)部屬性拒迅。加入不提供這兩個(gè)方法骚秦,那么這個(gè)屬性的值就不能為外界所改變她倘,因?yàn)轭惖膶傩阅J(rèn)是@protect(受保護(hù)類型)。屬性一般是私有的

super:只調(diào)用父類方法作箍,涉及到成員變量還是用的子類自己的硬梁。

2.super應(yīng)用場景

1)應(yīng)用在對(duì)象方法中

調(diào)用對(duì)象父類的對(duì)象方法

2)用在類方法中

調(diào)用類的父親的類方法





成員變量修飾符

1.@public:(公開)只要導(dǎo)入頭文件,任何位置都可以訪問

2.@protected:(半公開)可以在本類和子類當(dāng)中進(jìn)行訪問

3.@private:(私有)只能在本類當(dāng)中進(jìn)行訪問胞得,子類無法進(jìn)行訪問賦值荧止,但是子類可以繼承到

4.@package:(半公開)在同一框架內(nèi),可以直接訪問阶剑。


-->在.h文件當(dāng)中聲明的@private的成員變量跃巡,子類無法進(jìn)行重新定義


私有方法

父類當(dāng)中在.m文件當(dāng)中直接進(jìn)行實(shí)現(xiàn),但是沒有在.h文件當(dāng)中進(jìn)行聲明的方法牧愁,我們叫做私有方法素邪。

1)不能夠在外界進(jìn)行訪問。

2)不能在子類進(jìn)行訪問猪半。

3)父類私有的方法在子類中可以定義同名方法

4)私有方法不可以被子類繼承


多態(tài)


不同的對(duì)象以自己的方式相應(yīng)相同名稱方法的能力稱為多態(tài)


多態(tài)的條件

有繼承關(guān)系兔朦、有方法重寫

父類的聲明變量指向子類對(duì)象


如:狗 *g

= [狗 new];

?????? 動(dòng)物 *a = [狗 new];


貓 *c = [貓 new];

動(dòng)物 *a = [貓 new];


多態(tài)的優(yōu)點(diǎn)

多態(tài)的主要好處就是簡化了編程接口。它容許在類和類之間重用一些習(xí)慣性的命名磨确,而不用為每一個(gè)新加的函數(shù)命名一個(gè)新名字沽甥。醬,編程接口就是一些抽象的行為的集合乏奥,從而和實(shí)現(xiàn)接口的類區(qū)分開來


多態(tài)也使得代碼可以分散在不同的對(duì)象中而不用試圖在一個(gè)函數(shù)中考慮到所有可能的對(duì)象摆舟。這樣使得您的代碼擴(kuò)展性和復(fù)用性更好一些。當(dāng)一個(gè)新的情景出現(xiàn)時(shí)英融,您無須對(duì)現(xiàn)有的代碼進(jìn)行改動(dòng)盏檐,而只需要增加一個(gè)新的類和新的同名方法歇式。


為什么父類可以訪問子類繼承自父類的方法驶悟,但是無法訪問子類獨(dú)有的方法?

1.編譯器編譯時(shí)材失,只檢查指針變量的類型痕鳍,確定該指針變量類型里面有下面調(diào)用的方法,如果有該方法龙巨,編譯器就認(rèn)為是正確笼呆,可以編譯通過。

2.運(yùn)行時(shí)旨别,會(huì)動(dòng)態(tài)監(jiān)測對(duì)象的真實(shí)類型诗赌。然后調(diào)用對(duì)象自己的方法。

3.使用強(qiáng)制類型轉(zhuǎn)換可以訪問子類獨(dú)有的方法

如:Animal

*c = [Cat new];

??????[(Cat *)c jump];

[面試重點(diǎn)]OC運(yùn)行時(shí):OC不同于傳統(tǒng)程序設(shè)計(jì)語言秸弛,它可以在運(yùn)行時(shí)加入新的數(shù)據(jù)類型和新的程序模塊:動(dòng)態(tài)類型識(shí)別铭若,動(dòng)態(tài)綁定洪碳,動(dòng)態(tài)加載。


【了解】類對(duì)象


1.類對(duì)象的類型:Class類型

2.如何創(chuàng)建類對(duì)象

1)Class 類對(duì)象名 = [類名 class]叼屠;

2)類名 *對(duì)象名 = [類名 new]瞳腌;

?????Class 類對(duì)象名 = [對(duì)象名 class];

3.類對(duì)象只能調(diào)用類方法镜雨。

4.類對(duì)象不能訪問成員變量


【了解】SEL類型

1.SEL類型

SEL:全稱selector嫂侍,一種用來表示方法名類型的數(shù)據(jù)類型(方法名)。

SEL類型作用:

1)可以定義變量

2)可以用來作為方法的形參

3)可以用來作為方法的實(shí)參

類中方法存儲(chǔ)的原理

1)類里面的方法都是被轉(zhuǎn)換成SEL變量進(jìn)行存儲(chǔ)的荚坞。

2)當(dāng)類聲明一個(gè)對(duì)象挑宠,對(duì)象調(diào)用方法的時(shí)候,系統(tǒng)會(huì)把這個(gè)方法轉(zhuǎn)換成SEL颓影,然后拿著這個(gè)SEL到類方法中去匹配

[d run]; --->SEL


用法:SEL 名稱 = @selector(方法)痹栖;

調(diào)用:[對(duì)象

performSelector:SEL類型的數(shù)據(jù)];

Student *s = [Student new];

? ? ? ? //[s student];


? ? ? ? SEL s1 = @selector(student);

? ? ? ? SEL s2 = @selector(studyWithAge:);


? ? ? ? BOOL res = [Student

instancesRespondToSelector:s1];


? ? ? ? NSLog(@"%d",res);



Static在OC中的用法


static修飾局部變量:延長局部變量的生命周期

static修飾全局變量:當(dāng)前變量只能在當(dāng)前文件中使用

static修飾函數(shù):函數(shù)只能在當(dāng)前文件中使用


不能修飾實(shí)例變量

不能修飾方法

static@interface和@end之間是不被允許的


static的使用場合

1)可以定義全局變量,但是只能在Dog.m中使用

2)可以定義局部變量和C語言一樣瞭空,延長變量生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末揪阿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咆畏,更是在濱河造成了極大的恐慌南捂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旧找,死亡現(xiàn)場離奇詭異溺健,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钮蛛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鞭缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人魏颓,你說我怎么就攤上這事岭辣。” “怎么了甸饱?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵沦童,是天一觀的道長。 經(jīng)常有香客問我叹话,道長偷遗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任驼壶,我火速辦了婚禮氏豌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘热凹。我一直安慰自己泵喘,他們只是感情好瞭吃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涣旨,像睡著了一般歪架。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霹陡,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天和蚪,我揣著相機(jī)與錄音,去河邊找鬼烹棉。 笑死攒霹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浆洗。 我是一名探鬼主播催束,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼伏社!你這毒婦竟也來了抠刺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤摘昌,失蹤者是張志新(化名)和其女友劉穎速妖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聪黎,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罕容,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿饰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锦秒。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖喉镰,靈堂內(nèi)的尸體忽然破棺而出旅择,到底是詐尸還是另有隱情,我是刑警寧澤梧喷,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布砌左,位于F島的核電站,受9級(jí)特大地震影響铺敌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屁擅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一偿凭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧派歌,春花似錦弯囊、人聲如沸痰哨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斤斧。三九已至,卻和暖如春霎烙,著一層夾襖步出監(jiān)牢的瞬間撬讽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工悬垃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留游昼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓尝蠕,卻偏偏與公主長得像烘豌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子看彼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉廊佩,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評(píng)論 0 9
  • OC基礎(chǔ)總結(jié) 重新回過頭看這些基礎(chǔ)知識(shí),對(duì)許多知識(shí)點(diǎn)都有新的認(rèn)識(shí)靖榕,擁有堅(jiān)實(shí)的基礎(chǔ)才能更快的成長罐寨。 #improt ...
    xx_cc閱讀 6,032評(píng)論 10 56
  • 1.面向?qū)ο笕筇匦?-封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開接口簸淀。 3....
    夢(mèng)夜繁星閱讀 1,092評(píng)論 0 6
  • 面向?qū)ο笕筇匦裕悍庋b瓶蝴、繼承、多態(tài)面向?qū)ο笕筇匦?繼承 在OC中租幕,繼承為單繼承舷手。即每個(gè)類只能有一個(gè)父類,子類自動(dòng)...
    swuzjb閱讀 340評(píng)論 0 0
  • 文/淑影看了《我的前半生》,印象很深的是賀涵評(píng)價(jià)子君一家人的生活狀態(tài):你們一家人都在用力的生活著贾富。 這句話歉眷,是真理...
    淑影閱讀 512評(píng)論 2 10