OC三大特性之繼承和多態

一、繼承

    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.使用場合:

1>當兩個類擁有相同屬性和方法的時候,就可以將相同的東西抽取到一個父類中

2>當A類有用B類中的部分屬性和方法時,可以考慮讓B類繼承A類。

    3. super用法:子類調用父類中的某個方法
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


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