一、繼承
1.概念:程序裏的繼承子類繼承了父類,那麼子類就擁有父類中的所有成員變量和方法,這跟現實中的狗是動物的一種,狗也具備了動物 所必備的屬性,更符合我們的理解。
2.繼承的好處與缺點:
1>抽取出了重複的代碼
2>建立了類和類之間的聯繫
繼承的缺點:耦合性太強
3.繼承的實例
@interface Animal:NSObject
// 動物裏繼承了NSObject,獲得NSObject類的方法;
{
int _age;
int _weight;
}
// setter和getter
......
@end
@interface Dog :Animal
// dog類繼承Animal類,並獲得了父類的所有方法和屬性
@end
原理圖
注意:OC語言是單繼承語言。在oc語言中,基本上所有類的根類都是NSObject類。
二、繼承與組合
繼承的適用場合:
1>當兩個類擁有相同的屬性和方法時,就可以將相同的屬性和方法抽取到一個父類中。
2>當A類完全擁有B類中的部分屬性和方法時,可以考慮讓B類繼承A類(考慮),在這種情況下,也可以考慮使用組合。
繼承:xx是xxx,如狗是動物,可以讓狗繼承動物類
組合:XXX擁有xxx,如學生有書,可以讓書這個類作爲學生類的屬性
三、重寫和super
1.重寫概念:子類重新實現父類中的某個方法(對某個方法重新實現),覆蓋父類某個方法以前的做法。
2.使用場合:
3. super用法:子類調用父類中的某個方法1>當兩個類擁有相同屬性和方法的時候,就可以將相同的東西抽取到一個父類中
2>當A類有用B類中的部分屬性和方法時,可以考慮讓B類繼承A類。
super處於對象方法中時,那麼就會調用父類的對象方法使用場合:子類重寫父類的方法時想要保留父類的一些行爲
super處於類方法中時,那麼就會調用父類的類方法
(子類可以直接調用父類中的某個方法 [super 方法名])
4. super重寫方法
- (void)walk // 重寫父類的walk方法
{
NSLog("跳兩下");
[super walk]; // 調用父類的walk方法
}
四、多態
1.基本概念
多態在代碼中的體現,即爲多種形態,必須要有繼承,沒有繼承就沒有多態。
在使用多態是,會進行動態檢測,以調用真實的對象方法。
多態在代碼中的體現即父類指針指向子類對象。
2.代碼體現
Animal *a=[dog new];//Animal是父類,dog是子類 , 狗是動物
錯誤寫法:Dog *d=[Animal new]; // 動物不一定是狗,也可能是貓
3.優缺點
優點:節省了代碼,提高了效率。
如果方法或函數參數中使用的是父類類型,則可以使用父類指針傳入父類和子類對象。
void feed(Animal *a) // 定義餵動物的函數。
{
[a eat];
}
解析:上述函數的形參是父類Animal,所以此函數可以傳入父類和子類。
侷限性:
父類類型的指針不能調用子類的方法。(必須將父類指針強制轉化爲子類指針時才能調用子類中方法)
Animal *a=[dog new];
Dog *d = (dog *) a; // 將父指針a強制轉化爲子類指針d