黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
继承是面向对象的三大特征之一,也是实现软件复用的重要手段。OC的继承具有单继承的特点,每个子类只有一个直接父类。
继承的好处:
1> 抽取重复代码
2> 建立了类之间的关系
3> 子类可以拥有父类中的所有成员变量和方法
#import <Foundation/Foundation.h>
/********************Animal******************/
@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
/***********************Dog*********************/
@interface Dog : Animal
@end
@implementation Dog
@end
/**********************Cat*******************/
@interface Cat : Animal
@end
@implementation Cat
@end
/****************************************/
int main()
{
Dog *d = [Dog new];
[d setAge:6];
NSLog(@"age=%d",[d age]);
return 0;
}
2.1 重写父类方法
子类重新实现父类中的某个方法,覆盖父类中的方法叫做重写。子类重写父类的方法需要注意以下几点
1> 父类必须声明在子类的前面
2> 子类不能拥有和父类相同的成员变量
3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
-(void)setAge:(int)age;
-(int)age;
-(void)run;
+(void)test;
@end
@implementation Person
-(void)setAge:(int)age
{
_age = age;
}
-(int)age
{
return _age;
}
-(void)run
{
NSLog(@"personn----跑");
}
+(void)test
{
NSLog(@"调用了test");
}
@end
@interface Student : Person
{
int _no;
}
-(void)run;
+(void)test2;
@end
@implementation Student
-(void)run
{
NSLog(@"student----跑");
}
+(void)test2
{
[self test];
}
@end
int main()
{
[Student test2];
Student *stu = [Student new];
[stu run];
return 0;
}
1.继承的使用场合
1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
#import <Foundation/Foundation.h>
@interface Score : NSObject
{
int _cscore;
int _ocscore;
}
@end
@implementation Score
@end
@interface Student : NSObject
{
Score *_score; // 学生有个成绩类
int _age;
}
@end
@implementation Student
@end