定義為父類的指針而初始化為其子類,這樣因為子類可能重寫父類的方法。相同類型的變量在調(diào)用同一個方法時就可能會出現(xiàn)多種不同的行為特征。
指針變量在編譯階段只能調(diào)用其編譯時類型所具有的方法,但運行時則執(zhí)行它運行時類型所具有的方法。因此,編寫OC代碼時,指針變量只能調(diào)用聲明該變量時所用類中包含的方法。而不能調(diào)用其初始化的類(運行時類型)的方法。
不過可以使用performSelector:來調(diào)用。
向上轉(zhuǎn)型(upcasting):
把子類對象賦給父類指針變量,總會成功 ?但將父類賦給子類時,可能會出錯
指針變量的強制類型轉(zhuǎn)換
只是改變了改制真變量編譯時的類型,但改變量所指向?qū)ο蟮膶嶋H類型不不會發(fā)生任何改變。如果不加判斷的甲乙轉(zhuǎn)換,轉(zhuǎn)換出來的變量在調(diào)用方法時就會引發(fā)錯誤。
判斷指針變量的實際類型:
-(BOOL)isKindOfClass:clazz: 判斷該對象是否為clazz或其子類的實例
-(BOOL)isSubclassOfClass:clazz:判斷該對象是否為clazz的子類的實例