OC面向对象继承关系和组合关系笔记

时间:2023-03-08 17:09:36

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法;

继承的关系特点描述出来就是:** “是” **  (例如:学生类 是 人类)

组合关系描述的语句是:**** “拥有” ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 )

继承示例代码:

#import <Foundation/Foundation.h>

//Animal类的声明
@interface Animal : NSObject
{
int _legs;
} - (void)eat;
- (void)run;
@end //Animal类的实现
@implementation Animal
- (void)eat
{
NSLog(@"动物在吃东西"); } - (void)run
{
NSLog(@"动物在跑");
} @end //子类Dog 继承 Animal
@interface Dog : Animal
{
//int _legs;这个是不允许的,重复定义父类已有的成员变量,编译器会报错,但是在java中是可以的
} @end //子类dog的实现
@implementation Dog
//方法的覆盖或叫重写
- (void)eat
{
NSLog(@"狗在吃东西"); }
@end int main()
{ Dog *d = [Dog new];
[d eat];//由于子类重写了,所以就用子类的eat方法
[d run];//调用该方法时,还是会先在dog类中找,找不到时区父类中找 }

  继承的好处:

1:继承能够抽取重复的代码,提高了代码的重用;

2:继承使类和类之间建立了关系;

组合示例代码:

 //成绩类
@interface Score : NSObject
{
int _cScore;
int _ocScore;
}
@end @implementation Score @end //学生类
@interface Student : NSObject
{
//组合:_cScore,_ocScore这两个属性在Score类中有了,但是不适合用继承,用组合比较好
//int _cScore;
//int _ocScore;
Score *_score;
int _age;
}
@end @implementation Student : NSObject @end