OC面向對象—多態(tài)
一、基本概念
多態(tài)在代碼中的體現(xiàn),即為多種形態(tài),必須要有繼承,沒有繼承就沒有多態(tài)。
在使用多態(tài)是,會進行動態(tài)檢測,以調用真實的對象方法。
多態(tài)在代碼中的體現(xiàn)即父類指針指向子類對象。
多態(tài)的好處:
需要一個新的函數(shù)專門用來喂狗
Void feed(Dog *d)
{
[d? eat];
}
如果這個時候也需要喂貓,那就應該重寫新一個新的函數(shù)
Void feed(Cat *c)
{
[c? eat];
}
而狗和貓實際上都繼承自動物這個類,在這里就可以使用多態(tài)來簡化代碼了。
這里只需要把函數(shù)的參數(shù)寫成是Animal *類型的,那么Dog和Cat類型的對象就都可以傳入進來。
調用的時候直接改變參數(shù)就可以了。
多態(tài)的局限性:父類類型的指針變量不能直接調用子類特有的方法。
不建議的做法~
Animal *a=[[Dog alloc] init];
[a run];//在Animal類中沒有run方法,這里調用了狗對象的方法。
解決方法:可以將a強制轉換為Dog*類型的變量,如下:
Dog *d=(Dog *)a;//使用強制轉換,這里a和d指向的是同一個狗對象
三、多態(tài)使用總結
(1)沒有繼承就沒有多態(tài)
(2)代碼的體現(xiàn):父類類型的指針指向子類對象
(3)好處:如果函數(shù)方法參數(shù)中使用的是父類類型,則可以傳入父類和子類對象,而不用再去定義多個函數(shù)來和相應的類進行匹配了。
(4)局限性:父類類型的變量不能直接調用子類特有的方法,如果必須要調用,則必須強制轉換為子類特有的方法。