
封装的好处:
继承的好处:
不改变原来模型的基础上,拓充方法
建立了类与类之间的联系
抽取了公共代码
坏处:耦合性强(当去掉一个父类,子类将不能再使用)
继承的注意点:
继承和组合:
1 @interface Score : NSObject
2 {
3 int _cScore;
4 int _ocScore;
5 }
6 @end
7
8 @implementation Score
9 @end
10
11 @interface Student : NSObject
12 {
13 Score *_socre; // 这里用到组合,因为不能说成绩是个学生
14 int _age;
15 }
16 @end
17
18 @implementation Student
19 @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:
分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法 (便于合作开发)
分类的使用注意: