IOS多態(tài)特性

用一句話概括就是:事物在運(yùn)行過(guò)程中存在不同的狀態(tài)好爬。先以教科書(shū)般舉例說(shuō)明,下文再舉一個(gè)花木蘭替父從軍的例子幫助大家理解. 多態(tài)的存在有三個(gè)前提:
1.要有繼承關(guān)系
2.子類要重寫父類的方法
3.父類引用指向子類對(duì),
但是其中又有很多細(xì)節(jié)需要注意井辜。首先我們定義兩個(gè)類,一個(gè)父類Animal,一個(gè)子類Cat金句。

父類Animal
@interface Animal : NSObject

- (void)eat;

- (void)run;

@end

@implementation Animal

- (void)eat;
{
    NSLog(@"動(dòng)物在吃飯");
}
- (void)run;
{
    NSLog(@"動(dòng)物在奔跑");
}

@end
子類Cat
@interface Cat : Animal

@property (nonatomic ,assign) NSInteger age;

- (void)catchMouse;

@end

@implementation Cat

- (void)eat
{
    NSLog(@"貓?jiān)诔燥?);
}

- (void)run
{
    NSLog(@"貓?jiān)诒寂?);
}

- (void)catchMouse
{
    NSLog(@"貓抓老鼠");
}

@end
測(cè)試
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    Animal *animal = [[Cat alloc] init];
    [animal eat];
    [animal run];
}

結(jié)果:
2018-10-22 11:00:58.816523+0800 Polymorphic[4372:1542859] 貓?jiān)诔燥?2018-10-22 11:00:58.816566+0800 Polymorphic[4372:1542859] 貓?jiān)诒寂?

以上的三段代碼充分體現(xiàn)了多態(tài)的三個(gè)前提错沃,即:
1、存在繼承關(guān)系
Cat類繼承了Animal類
2棕兼、子類要重寫父類的方法
子類重寫(override)了父類的兩個(gè)成員方法eat(),sleep()抵乓。其中eat()是非靜態(tài)的伴挚,sleep()是靜態(tài)的。
3灾炭、父類數(shù)據(jù)類型的引用指向子類對(duì)象茎芋。
測(cè)試類中Animal *animal = [[Cat alloc] init];語(yǔ)句在堆內(nèi)存中開(kāi)辟了子類(Cat)的對(duì)象,并把棧內(nèi)存中的父類(Animal)的引用指向了這個(gè)Cat對(duì)象蜈出。
到此田弥,滿足了Java多態(tài)的的必要三個(gè)前提。

那么多態(tài)有什么弊端呢铡原?有的皱蹦,即多態(tài)后不能使用子類特有的屬性和方法煤杀。往上面的代碼看,子類Cat有一個(gè)特有的屬性age; 并且還有一個(gè)特有的抓老鼠的方法- (void)catchMouse沪哺。但是在測(cè)試類中沈自,我們嘗試調(diào)用子類特有的方法- (void)catchMouse和打印子類特有的成員屬性age; 就會(huì)報(bào)錯(cuò)。

[animal catchMouse];
animal.age  = 100;

原因就是多態(tài)的弊端辜妓,就是:不能使用子類特有的成員屬性和子類特有的成員方法枯途。

--------------------------------------------------華麗的分割線----------------------------------------------------------------------

如果在代碼執(zhí)行過(guò)程中還想使用Cat類中特有的屬性age和它特有的成員方法- (void)catchMouse了怎么辦呢?那我們就可以把這個(gè)父類引用指向了子類對(duì)象的家伙animal再?gòu)?qiáng)制變回Cat類型籍滴。這樣animal就是Cat類型的引用了酪夷,指向的也是Cat對(duì)象了,自然也能使用Cat類的一切屬性和一切的成員方法孽惰。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    Animal *animal = [[Cat alloc] init];
    [animal eat];
    [animal run];

    Cat *cat = (Cat *)animal;
    [cat catchMouse];
    cat.age = 100;
}

很明顯晚岭,執(zhí)行強(qiáng)轉(zhuǎn)語(yǔ)句Cat *cat = (Cat *)animal;之后,ct就指向最開(kāi)始在堆內(nèi)存中創(chuàng)建的那個(gè)Cat類型的對(duì)象了勋功。這就是多態(tài)的魅力吧坦报,雖然它有缺點(diǎn),但是它確實(shí)十分靈活狂鞋,減少多余對(duì)象的創(chuàng)建片择,不用說(shuō)為了使用子類的某個(gè)方法又去重新再堆內(nèi)存中開(kāi)辟一個(gè)新的子類對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骚揍,隨后出現(xiàn)的幾起案子字管,更是在濱河造成了極大的恐慌,老刑警劉巖信不,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘲叔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡抽活,警方通過(guò)查閱死者的電腦和手機(jī)借跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酌壕,“玉大人,你說(shuō)我怎么就攤上這事歇由÷央梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵沦泌,是天一觀的道長(zhǎng)糊昙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谢谦,這世上最難降的妖魔是什么释牺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任萝衩,我火速辦了婚禮,結(jié)果婚禮上没咙,老公的妹妹穿的比我還像新娘猩谊。我一直安慰自己,他們只是感情好祭刚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布牌捷。 她就那樣靜靜地躺著,像睡著了一般涡驮。 火紅的嫁衣襯著肌膚如雪暗甥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天捉捅,我揣著相機(jī)與錄音撤防,去河邊找鬼。 笑死棒口,一個(gè)胖子當(dāng)著我的面吹牛寄月,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陌凳,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼剥懒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了合敦?” 一聲冷哼從身側(cè)響起初橘,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎充岛,沒(méi)想到半個(gè)月后保檐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崔梗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年夜只,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒜魄。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扔亥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谈为,到底是詐尸還是另有隱情旅挤,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布伞鲫,位于F島的核電站粘茄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柒瓣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一儒搭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芙贫,春花似錦搂鲫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至褪秀,卻和暖如春蓄诽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媒吗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工仑氛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闸英。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓锯岖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親甫何。 傳聞我的和親對(duì)象是個(gè)殘疾皇子出吹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • 多態(tài)就是對(duì)象的多種形態(tài),即相同的消息使得不同的類做出不同的響應(yīng)。 多態(tài)存在的三個(gè)必要條件:繼承、重寫欣范、父類變量引用...
    予別她閱讀 447評(píng)論 0 0
  • 1.面向?qū)ο笕筇匦?-封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口灸蟆。 3....
    夢(mèng)夜繁星閱讀 1,088評(píng)論 0 6
  • 寶貝現(xiàn)在已經(jīng)滿四歲3個(gè)月,幼兒園小班下學(xué)期了∏鬃澹現(xiàn)在開(kāi)學(xué)三周(請(qǐng)假一周)炒考,早上跟我分別的時(shí)候還是哭,最近在家陪她的時(shí)...
    三珊1016閱讀 145評(píng)論 0 0
  • 流動(dòng)的國(guó)土霎迫,移動(dòng)的地塊斋枢。 新聞直播間。
    學(xué)習(xí)助手閱讀 196評(píng)論 0 0
  • 這兩天鬧得沸沸揚(yáng)揚(yáng)的雙宋婚訊测柠,傷了多少妹子的心啊 宋仲基這枚小鮮肉挺討韓國(guó)大媽們的心炼鞠,昨天多少人都在談?wù)撨@事啊缘滥,很...
    梨卡閱讀 130評(píng)論 0 0