黑马程序员-OC语言之继承

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、继承


   1. 继承的好处:


       1> 抽取了重复代码


       2建立了类与类之间的联系


  2. 子类可以拥有父类中的所有成员变量和方法

eg:


#import <Foundation.Foundation.h>


@interface Animal : NSObject //声明一个Animal类,并且继承了NSObject
{
    int _age; // 声明了两个成员变量
    double _weight;
}
- (void)setAge:(int)age; //声明set方法
- (void)setWeight:(double)weight;
- int)age;  //声明get方法
- (double)weight;
- (void)run;


@implementation Animal //类的实现
- (void)setAge:(int)age //set方法的实现
{
    _age = age;
}

- (void)setWeight:(double)weight//set方法的实现
{
    _weight = weight;
}

- int)age //get方法的实现
{
    return _age;
}

- (double)weight //get方法的实现
{
    return _weight;
}

- (void)run
{
    NSLog(@"动物跑了起来");
}
@end





@interface Dog : Animal //Dog继承了Animal里面所有的成员变量和方法


@end


@implementation Dog

@end

int main()
{
    Dog *d = [Dog new];
    [d setAge:8];
    [d setWeight:20.0];
    NSLog(@"%岁的狗,%d公斤",[d age], [d weight]);
    
    return 0;
}


  3. 基本上所有类的根类都是NSObject


  4. 注意点:


   1)不允许子类和父类拥有相同的成员变量


   2)父类放在子类之前声明


   3)子类和父类允许有相同的方法


   4)调用某个对象的方法时,优先去当前类中找,如果找不到,再去父类中找


   5)子类重新实现父类的某个方法,会覆盖父类以前的方法

5.重写

子类重新实现父类中某个方法,覆盖父类以前的做法

eg:



#import <Foundation.Foundation.h>


@interface Animal : NSObject //声明一个Animal类,并且继承了NSObject
{
    int _age; // 声明了两个成员变量
    double _weight;
}
- (void)setAge:(int)age; //声明set方法
- (void)setWeight:(double)weight;
- int)age;  //声明get方法
- (double)weight;
- (void)run;


@implementation Animal //类的实现
- (void)setAge:(int)age //set方法的实现
{
    _age = age;
}

- (void)setWeight:(double)weight//set方法的实现
{
    _weight = weight;
}

- int)age //get方法的实现
{
    return _age;
}

- (double)weight //get方法的实现
{
    return _weight;
}

- (void)run
{
    NSLog(@"动物跑了起来");
}
@end





@interface Dog : Animal //Dog继承了Animal里面所有的成员变量和方法

- (void)run;
@end


@implementation Dog
- (void)run //重写父类run方法
{
    NSLog(@"%岁,%d公斤的狗跑了起来",[d age], [d weight]);    
}

@end

int main()
{
    Dog *d = [Dog new];
    [d setAge:8];
    [d setWeight:20.0];
    [d run];
    NSLog(@"%岁的狗,%d公斤",[d age], [d weight]);
    
    return 0;
}



   6. 每个类中都有一个superclass指针指向父类


   7. 继承的缺点:耦合性太强(类与类之间的关系过于紧密)


   继承和组合


       继承:XX XXX


       组合:XX拥有XXX (格式 : score  *_score


  9.继承的使用场合


     它的所有属性都是你想要的,一般就继承


     它的部分属性是你想要的,可以抽取出另一个父类


super关键字


   1> 可以直接调用父类中的方法


   2> super处在对象方法中,就会调用父类的对象方法。处在类方法中,那么就会调用父类的类方法


   3> 适用场合:子类重写父类的方法时想保留父类的一些行为


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值