OC:多態



多態的前提:

      必須存在繼承關係,在代碼中的表現形式就是父類類型保存子類類型,即父類

      的指針指向子類對象。

多態的使用:

     @1.      父類的引用指向子類的對象,發送消息,調用的是子類對象的方法。

     @2.       父類的引用指向本類的對象,發送消息,調用本類的方法。

    

    在多態下,父類的引用可以指向子類的引用,當編譯的時候,編譯器無法確定指向的對象是什麼類型,所有編譯器會將引用當做父類類型引用編譯檢查。 

   在調用方法時,發現確實是子類對象,爲子類類型創建空間。

     例如:Person *p=[Student alloc]  init];編譯時,會Student 類型當成Person類型編譯。[p  play];運行時,調用的是Student類型的對象。

   在OC中,調用方法是,會檢測對象的真實類型,稱爲動態綁定。


   父類保存子類指針,在調用方法時,有以下步驟:

  @1.   在編譯的時候,會檢查 父類指向子類的指針 調用的方法,在父類中是

        否存在,如果有,編譯通過

  @2.   在運行時,會動態檢測 初始對象 的真實類型

   多態的好處:

  @1.  提供動態綁定特性,減少不必要的程序冗餘。在方法中,把父類當成參數,使

     該方法具備調用所有子類同樣方法的能力,不比爲每個子類都寫個方法。

  @2.  多態的出現提高了程序的擴展性和後期可維護型


   例如:

    

-(void)breed:(Animal *)animal

{

    [animal eat];

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章