黑马程序员_OC继承与组合

---------------------- 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中的成员变量与方法。

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值