继承:
>抽取重复代码
>建立类之间的关系
>子类可以拥有父类中的所有成员变量和方法
>所有类的根类是NSObject ,NSProxy不常用
声明:动物类
@interface Animal : NSObject //动物继承类NSObject
{
int _age;
double _weight;
}
- (void)setAge:(int) age;
- (int)age;
- (void)setWeight:(double)weight;
- (double)weight;
@end
实现:
@implementation Animal
......
@end
声明 :狗类
@interface Dog : Animal; //狗继承类Animal,相当于拥有了Animal里面的所有成员变量和方法。
@end
注意:
>父类的声明需要写在子类声明之前
>子类和父类不能有相同的成员变量
> 子类方法可以与父类名相同,调用的时候就近原则。------即重写
>在某些场合,虽然双方都具有继承逻辑特征,但是,并不适合:这时候需要组合:
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end
@implementation Score
@end
//继承:XX是一个XXX
//组合:XX 拥有 XXX
@interface Student : NSObject//理论上确实可以继承Score@interface Student : Score,但是不符合道理,此时就要用到组合
{
Score *score;//组合:把Score当成Student的一部分---->学生拥有成绩
//int _cScore;
//int _ocScore;
int _age;
}
@end
@implementation Student
@end
使用super:
使用环境:子类使用父类的方法,并重写父类中的事情加上自己的东西
可以直接调用父类中的方法:
如果super处在对象方法中,就会调用父类中的对象方法。
如果super处在类方法中,就会调用父类中的类方法。————取决于super所在环境
//普通僵尸
@interface Zoombie : NSObject
- (void)walk;
- (void)test;
+ (void)test;
@end
@implementation Zoombie
- (void)walk
{
NSLog(@"Zoombie Walk");
}
- (void)test
{
NSLog(@"Zoombie + test");
}
+ (void)test
{
NSLogg(@"Zoombie - test");
}
//跳跃僵尸
@interface JumpZoombie : Zoombie
+ (void)testjump;
@end
@implementation JumpZoombie
+ (void)testjump
{
[super test];
}
- (void)walk
{
NSLog(@"JumpZoombie Jump");
[super walk];//在自己的walk中引用了父类的walk方法
}
//主函数
int main(){
[JumpZoombie testjump];
JumpZoombie *p=[JumpZoombie new];
[p walk];
}
注意:super不知不止可以调用对象方法,还可以调用累方法