你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-OC言語 (七)承繼、多態、類別

iOS開發-OC言語 (七)承繼、多態、類別

編輯:IOS開發綜合

 承繼、多態、類別

 

學習目的

1、承繼的含義

2、父類子類的別稱

3、字段和音訊的承繼

4、重寫和重寫音訊的調用

5、多態

6、類別(Category)

 

=============================================

 

1.需求了解的知識

 

面向對象的三個根本特征:   1、封裝 2、承繼 3、多態

 

 

1、承繼(單承繼):    父類(超類)和子類的關系。

       承繼的兩個類,存在父子關系。

 

     OC支持單承繼,不支持多承繼。

      

 

1.1 生活中的承繼

                 人(父類) ——  男人/女人(子類)

                男人/女人(父類) ———  學生(子類)

               學生(父類)——— 大學生(子類)

             大學生(父類) ———  大四學生(子類)

             大四學生(父類)——— 小明(子類)

 

 

【注】

(1)把承繼又叫做派生

父類的屬性(成員變量(不包括公有))和辦法,子類可以直接獲取,這個進程就叫做承繼

子類在父類的根底上,創立了自己獨有的成員變量和辦法,這個進程就叫做派生。

 

承繼和派生其實是說的承繼概念的不同的側重點。

      (2)提示:每個類中都有一個super class指針,該指針指向自己的父類。對象中有一個isa指針,該指針指向調用該對象的類。

 

 

    承繼的益處:

  1)創立少量的類似類的時分,可以節省任務量。抽取出了反復的代碼

  2)運用框架中的類,或曾經寫好的類,承繼該類,生成一個派生類,比原類更好用。

留意:NSString、NSArray、NSDictionary都是不可以承繼的。

       3)樹立了類和類之間的聯絡

 

      承繼的缺陷:

            耦合性太強

 

 NSString不能被承繼的緣由:

           NSString這個類在設計的時分采用了“籠統工廠”形式,外部是個class cluster,一個類簇。也就是說NSString是個“工廠類”,然後它在外層提供了很多辦法接口,但是這些辦法的完成是由詳細的外部類來完成的。當運用NSString生成一個對象時,初始化辦法會判別哪個“自己外部的類”最合適生成這個對象,然後這個“工廠”就會生成這個詳細的類對象前往給你。這種又外層類提供一致籠統的接口,然後詳細完成讓隱藏的,詳細的外部類來完成。

 

 

 

  1.2 代碼中的承繼

<1>承繼的根本語法

 

(1)@interface 子類名:父類名

@end

 

 

(2)承繼之後

子類可以運用父類的一切共無方法  

子類可以取得父類非公有的成員變量

 

 

 

<2>重寫

1.子類從父類承繼的辦法, 有時分不合適子類,子類可以重寫這個辦法

2.重寫就是重新完成一遍父類的辦法(辦法名一樣 ,完成內容不同)

3.子類重寫父類辦法之後,子類對象最終執行的是子類重寫之後的辦法 。

 

 

 

1.3 承繼在內存中的表現

子類承繼父類之後。 子類對象的構成:

1) 父類的字段和辦法

2) 子類自己獨有的字段和辦法

 

 

 

【承繼的作用】

1、疾速創立多個形似的類

2、對類停止擴展

3、自定義一些零碎的一些功用控件(UI外面用的比擬多)

 

 

【重寫】有時分從父類承繼到的辦法,並不合適子類,子類可以重寫這個辦法。

【重寫是多態的一種,多態就是同一個聲明不同的完成】

【注】很多時分,子類的辦法只需求在父類的同名辦法中增補些內容。可以經過關鍵字【supper】調用父類的辦法,再增添子類獨有的內容。

 

        1.4 關鍵字super

Super關鍵字,在子類中重寫辦法時,可以讓調用者跳過這一層而調用父類中的辦法。

 

 

作用:

(1)直接調用父類中的某一個辦法

(2)Super處在對象辦法中,那麼就會調用父類的對象辦法;super處於類辦法中,那麼就會調用父類的類辦法。

 

 

運用場景:子類在重寫父類辦法時,想要保存父類的一些行為。

 

 

         1.5 承繼和組合

承繼的適用場所:

(1)當兩個類擁有相反的屬性和辦法時,就可以將相反的屬性和辦法抽取到一個父類中。

(2)當A類完全擁有B類中的局部屬性和辦法時,可以思索讓B類承繼A類(思索),在這種狀況下,也可以思索運用組合。

承繼:###是xxx,如狗是植物,可以讓狗承繼植物類

組合:###擁有xxx,如學生有書,可以讓書這個類作為學生類的屬性

 

 

 

 

 

 

———————————————————

2、多態與類的音訊機制 

【多態】重寫、虛函數 

//其實多態就是指,同一個接口不同的完成

同一個辦法,不同的完成,稱為多態。重寫是多態的一種。

 

 

        

         辦法重載也是多態的一種。辦法重載是指在一個類中定義多個同名的辦法,但要求每個辦法具有不同的參數的類型或參數的個數。

  【留意】OC沒有嚴厲的辦法重載。

 

 

 

 

【虛辦法】

            虛函數定義:調用辦法時,不看指針,看對象,對象的地址指向什麼對象,就調用什麼辦法,稱為虛辦法。

 

            虛辦法的益處:可以描繪不同事物被相反事情觸發,發生不同的呼應(後果)

 

 

1.呼應音訊,不看指針,看對象。

2.父類的指針,可以指向子類的對象(子類的對象賦值給父類)。

 

 

 

【注】

虛辦法表現了不同事物被同一事情觸發,有不同的呼應。

給不同對象發送相反的音訊,反響不一樣。

 

 

完成多態(滿足三個條件)

1、有承繼關系

2、有重寫

3、父類的指針指向了子類的對象

 

 

 

 

【注】NSString NSArray NSDictionary NSNumber 都是【工廠類】或許是籠統類,不能被承繼,即便被承繼,也不能運用父類的辦法。

 

———————————————————

5、類別/類目   category

 

          類別的寫法:

 

          @interface 類名 (類別名)

 

     定義辦法

 

@end

 

 

 

        如何給一個類擴展辦法?

 

1、承繼

2、類別

 

 

 

 

 

  注:一旦運用類別給已有的類增補辦法,那麼這個類的對象就可以運用這個辦法

 

 

 

<2>.類別功用:

  1. 可以給已有/ 零碎原生的類添加辦法,不能添加全局變量和屬性。

  2.可以對類的辦法停止分類管理,可以將類的完成分散到多個不同文件或多個不同框架中。

 

 

 

<3>運用類別需求留意的問題

1.類別中不能添加成員變量

2.運用類別添加的辦法須導入類別頭文件

3.父類類別中的辦法,子類也可以用

 

 

 

<4>類擴展

當不想對外地下一些類的辦法時,我們可以運用類擴展

 

1.類擴展的根本語法

在.m文件中

@interface Person()//沒有名字

  - (void)song;

@end

 

@implementation Person

- (void)song{

 

}

@end

注: 類擴展中的聲明和完成都放在.m文件中

 

 

 

    2.類擴展的功用

1.可以完成公有辦法

2.可以聲明成員變量 ,成員變量是公有的,子類和其他類訪問不了。

 

【iOS開發-OC言語 (七)承繼、多態、類別】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved