封裝的好處:
繼承的好處:
不改變原來模型的基礎上,拓充方法
建立了類與類之間的聯系
抽取了公共代碼
壞處:耦合性強(當去掉一個父類,子類將不能再使用)
繼承的注意點:
繼承和組合:
1 @interface Score : NSObject 2 { 3 int _cScore; 4 int _ocScore; 5 } 6 @end 7 8 @implementation Score 9 @end10 11 @interface Student : NSObject12 {13 Score *_socre; // 這里用到組合,因為不能說成績是個學生14 int _age; 15 }16 @end17 18 @implementation Student19 @end
組合和繼承可以這樣理解:
多態:不同的對象已自己的方式響應相同名稱方法的能力稱為多態
多態簡單的說就是:父類指針指向子類對象
多態的好處:
#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// 參數中使用的父類類型,可以傳入子類、父類對象void feed(Animal *a){ [a eat];}// 這個函數體現了多態的好處,節省了代碼int main(){ Animal *aa = [[Animal alloc] init]; feed(aa); Dog *dd = [[Dog alloc] init]; feed(dd); Cat *cc = [[Cat alloc] init]; feed(cc);}
多態的局限性:
// 強制轉換Person *p = [[Student alloc] init];// 假如學習是學生特有的方法,如果想調用需要強制轉換// OC是弱語法如果用[p study]也可以(是動態綁定),但由于編譯器會出現警告,所以不要這么寫用強制轉換 讓其更合理Student *s = (Student *)p;[s study];
分類-Category:
分類的作用:在不改變原來類內容的基礎上,可以為類增加一些方法 (便于合作開發)
分類的使用注意:
新聞熱點
疑難解答