类的继承
1.继承的好处
1>抽取重复的代码
2>建立类与类之间的关系
3>子类可以拥有父类的所有成员变量和方法
注意:基本上所有类的根类都继承NSObject类
如下例子说明:
#import <Foundation/Foundation.h>
@interface Animal : NSObject //声明一个动物类,继承NSObject
{
int _age;//设置年龄
double _weight;//设置体重
}
- (void)setAge:(int)age;
- (int)age;
- (void)setWight:(double)weight;
- (double)weight;
@end
@implementation Animal
- (void)setAge:(int)age
{
_age=age;
}
- (int)age
{
return _age;
}
- (void)setWight:(double)weight
{
_weight=weight;
}
- (double)weight
{
return _weight;
}
@end
/*****Dog的声明******/
@interface Dog :Animal //Dog具有动物的属性,所以狗继承动物类,避免了一些代码的重复写
@end
@implementation Dog
@end
/******Cat的声明********/
@interface Cat :Animal //Cat也具有动物的属性,所以继承动物类
@end
@implementation Cat
@end
int main()
{
Dog *d=[Dog new]; //创建一个Dog对象
[d setAge:10];
NSLog(@"狗的年龄是:%d",[d age]);
return 0;
}
利用类的继承使类与类建立关系,减少了不必要的代码,使代码结构清晰
2.类的重写
1>重写:子类重写了父类的某个方法,覆盖父类以前的做法
2>注意
*父类必须声明在子类前面
*子类不能拥有父类同名的成员变量
*调用某个方法时,先在当前对象中找,如果找不到,去父类中找
坏处:耦合性太强
如下例子说明:
#import <Foundation/Foundation.h>
@interface Person : NSObject //声明一个Person类,声明在Student类前,继承NSObject类
{
int _age; //年龄属性
}
- (void)setAge:(int)age; //声明方法
- (int)age;
- (void)run;
@end
@implementation Person
- (void)setAge:(int)age
{
_age=age;
}
- (int)age
{
return _age;
}
- (void)run
{
NSLog(@"跑起来了");
}
@end
@interface Student :Person //继承Person类
{
int _no;
//int _age;//子类不能与父类有相同的成员变量
}
- (void)run;
@end
@implementation Student
//子类重写了父类的某个方法,覆盖父类以前的做法
- (void)run
{
NSLog(@"student跑起来了");
}
@end
int main()
{
Student *s = [Student new];
[s run]; //调用run方法,首先在Student类中找run方法
return 0;
}
运行结果:
student跑起来了,而不是:Person跑起来了,因为Student类中也有run方法,所以调用Student中的方法
今天的学习总结就是这些,希望大家评点