Objective-C中的封裝、繼承、多態(tài)、分類

一、 封裝

封裝的好處:

  1. 過濾不合理的值
  2. 屏蔽內(nèi)部的賦值過程
  3. 讓外界不必關(guān)注內(nèi)部的細(xì)節(jié)

二、繼承

繼承的好處:

  1. 不改變原來模型的基礎(chǔ)上,拓充方法
  2. 建立了類與類之間的聯(lián)系
  3. 抽取了公共代碼

繼承的壞處:耦合性強(qiáng)(當(dāng)去掉一個父類,子類將不能再使用)

繼承的注意點:

  1. 子類和父類不能有相同的成員變量
  2. 子類可以重寫父類的方法
  3. 子類方法和屬性的訪問過程:如果子類沒有,就去訪問父類的

三、組合

//繼承和組合:
@interface Score : NSObject {
         int _cScore;
         int _ocScore;  
}
 @end

@implementation Score

@end

@interface Student : NSObject {
       Score *_socre;  // 這里用到組合,因為不能說成績是個學(xué)生
      int _age;  
}
@end

@implementation Student
@end

組合和繼承的理解:

  1. 繼承是 xxx 是 xxx
  2. 組合是 xxx 擁有 xxx

四、多態(tài)

多態(tài):不同的對象已自己的方式響應(yīng)相同名稱方法的能力稱為多態(tài)
態(tài)簡單的說就是:父類指針指向子類對象
多態(tài)的好處:用父類接收參數(shù),節(jié)省代碼

#import <Foundation/Foundation.h>
@interface Animal : NSObject

@end

@implementation Animal
- (void)eat {
    NSLog(@"Animal----eat food");
}
@end

@interface Dog : Animal

@end

@implementation Dog
- (void)eat {
    NSLog(@"Dog----eat food");
}
@end

@interface Cat : Animal

@end

@implementation Cat
- (void)eat {
    NSLog(@"Cat----eat food");
}
@end

// 參數(shù)中使用的父類類型,可以傳入子類、父類對象
void feed(Animal *a) {
        [a eat];
}
// 這個函數(shù)體現(xiàn)了多態(tài)的好處,節(jié)省了代碼
int main()
{
        Animal *aa = [[Animal alloc] init];
        feed(aa);
        Dog *dd = [[Dog alloc] init];
        feed(dd);
        Cat *cc = [[Cat alloc] init];
        feed(cc);
}

多態(tài)的局限性:父類類型的變量 不能 直接調(diào)用子類的特有方法 (要用到強(qiáng)制轉(zhuǎn)換)

// 強(qiáng)制轉(zhuǎn)換
Person *p = [[Student alloc] init];
// 假如學(xué)習(xí)是學(xué)生特有的方法,如果想調(diào)用需要強(qiáng)制轉(zhuǎn)換
// OC是弱語法如果用[p study]也可以(是動態(tài)綁定),但由于編譯器會出現(xiàn)警告,所以不要這么寫用強(qiáng)制轉(zhuǎn)換 讓其更合理
Student *s = (Student *)p;
[s study];
動態(tài)綁定:在運(yùn)行時根據(jù)對象的類型確定動態(tài)調(diào)用的方法

五、分類-Category

分類的作用:在不改變原來類內(nèi)容的基礎(chǔ)上,可以為類增加一些方法 (便于合作開發(fā))
分類的使用注意:

  1. 分類只能增加方法,不能增加成員變量
  2. 分類方法實現(xiàn)中可以訪問原來類中的聲明的成員變量
  3. 分類可以重新實現(xiàn)原來類中的方法,但會覆蓋掉原來類中的方法 ,會導(dǎo)致原來的方法不能使用(所以一般不會在分類中重現(xiàn)實現(xiàn)原來類中的方法)
  4. 方法調(diào)用的優(yōu)先級:分類(最后參與編譯的分類優(yōu)先)---> 原來類 ---> 父類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,897評論 18 399
  • 1.面向?qū)ο笕筇匦?-封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實現(xiàn)細(xì)節(jié),僅對外公開接口。 3....
    夢夜繁星閱讀 1,176評論 0 6
  • Objective-C 1. import的用法 拷貝文件內(nèi)容可以自動防止文件的內(nèi)容被重復(fù)拷貝(#define宏定...
    馬文濤閱讀 5,478評論 3 17
  • 重點掌握 3 類對象和方法 對象就是一個物體 類的獨特存在就是一個實例,對實例進(jìn)行操作叫做方法。方法可以應(yīng)用于類或...
    Coder大雄閱讀 1,383評論 0 2
  • 進(jìn)入大四后,早己不是天之驕子的大學(xué)生們便開始騷動起來。不被父母嘮叨管束,懶散放縱的大學(xué)生活眼看就要結(jié)束了,來年七月...
    扶青閱讀 307評論 1 4

友情鏈接更多精彩內(nèi)容