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