---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、继承:在OC中,当两个或多个类拥有相同成员变量和方法时,不必要把这些共同的成员变量与方法在每个类中都拷贝一次,这时候就要考虑用继承。把这些类中共同的成员变量和方法抽提到一个父类中去,然后让这些类都继承这个父类,这些子类就可以拥有父类中的所有成员变量和方法。另外,子类还可以重新实现父类中的某个方法,覆盖父类以前的做法。 当调用某个方法时,优先去当前类中找,如果找不到,再去父类中找。
例如:Dog类与Cat类都有成员变量_age和_weight以及相应的set与get方法,这时可以把Dog类与Cat类共同成员变量_age和_weight以及相应的set与get方法抽提到Animal类中去,让Dog类与Cat类都去继承Animal类,这时Dog类与Cat类都具有了Animal类中的成员变量_age和_weight以及相应的set与get方法。
代码示例:
1.Animal类:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
int _age;
double _weight;
}
- (void)setAge:(int)age;
- (int)age;
- (void)setWeight:(double)weight;
- (double)weight;
@end
@implementation Animal
- (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
- (void)setWeight:(double)weight
{
_weight = weight;
}
- (double)weight
{
return _weight;
}
@end
2.Dog类:
@interface Dog : Animal
@end
@implementation Dog
@end
3.Cat类:
@interface Cat : Animal
@end
@implementation Cat
@end
在OC中,: Animal代表继承了Animal,这里,Dog与Cat称为Animal的子类,Animal称为Dog与Cat的父类。
继承的好处:
1.抽取重复代码,提高了代码的复用率;
2.不改变原来模型的基础上,拓充方法
3.建立了类之间的关系;
4.子类可以拥有父类中的所有成员变量和方法;
继承的注意:
1.父类必须声明在子类的前面;
2.子类不能拥有和父类相同的成员变量;
3.调用某个方法时,优先去当前类中找,如果找不到,去父类中找;
4.基本上所有类的根类是NSObject,只有继承了NSObject才可以创建对象;
继承的坏处:
代码的耦合性太强;
二、组合:当A是B,如上面的Dog是Animal时,考虑让A继承B,但是当A拥有B时,如Student类拥有一个Score类,但不能说Student是一个Score,这时就要考虑用组合而非继承。
代码示例:
1.Score类:
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end
@implementation Score
@end
2.Student类:
@interface Student : NSObject
{
Score *_score;
int _age;
}
@end
@implementation Student
@end
这里Student拥有一个Score属性,但不能说Student是Score,所以这是考虑用组合,让Score成为Student的一个成员变量。同样,Student拥有的Score中的成员变量与方法。