封装的好处:
继承的好处:
不改变原来模型的基础上,拓充方法
建立了类与类之间的联系
抽取了公共代码
坏处:耦合性强(当去掉一个父类,子类将不能再使用)
继承的注意点:
继承和组合:
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:
分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法 (便于合作开发)
分类的使用注意:
新闻热点
疑难解答