多態(tài)

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)局限性:父類類型的變量不能直接調用子類特有的方法,如果必須要調用,則必須強制轉換為子類特有的方法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 多態(tài)就是對象的多種形態(tài),即相同的消息使得不同的類做出不同的響應。 多態(tài)存在的三個必要條件:繼承、重寫、父類變量引用...
    予別她閱讀 454評論 0 0
  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義,用來描述對象將要有什么(屬性)。可被本類方法和其他跟當前類有關...
    jeffierw閱讀 559評論 0 0
  • 1.面向對象三大特性 -封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實現(xiàn)細節(jié),僅對外公開接口。 3....
    夢夜繁星閱讀 1,117評論 0 6
  • 在OOP程序設計中,當我們定義一個class的時候,可以從某個現(xiàn)有的class繼承,新的class稱為子類(Sub...
    chen_000閱讀 251評論 1 1
  • 程序在運行的過程中,根據(jù)傳遞的參數(shù)的不同,執(zhí)行不同的函數(shù)或者操作不同的代碼,這種在運行過程中才確定調用的方式成為運...
    云Shen不知處閱讀 408評論 0 0