黑马程序员-ios学习笔记 oc 继承

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

oc继承

一、继承的定义:即指一个对象直接使用另一个对象的属性和方法。

如下图: 

基类、父类—————————————>动物

动物的子类,麻雀或金鱼的父类————>鸟或鱼

鸟或鱼的子类、派生类————————>麻雀、黄鹂鸟、鲨鱼、金鱼



二、继承的代码实现

1、基类和派生类之间的关系

派生类方法属性=基类方法属性+派生类自己新增方法和属性

注:1)基类的私有属性能被继承,不能被使用;

       2)oc中的继承是单继承:就是一个类只能有一个父类,不能继承多个父类;

       3)继承的合理性。

2、方法的重写:从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。 

注:1)重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突;

       2) 从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义;不用考虑父类中       方法已存在的问题; 

      3)重写后,子类可以通过super调用父类的方法。 

例:

主函数:

#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Bird.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Animal *ani=[Animal new];   //创建animal指针变量ani
        ani.name=@"Animal";         //调用animal写入名字
        ani.age=99;                 //调用animal写入年龄
        [ani eat];                  //调用animal的eat方法
        [ani run];                  //调用animal的ren方法
        NSLog(@"名字:%@\t年龄:%d",ani.name,ani.age); //输出
        Bird *bird=[Bird new]; //创建bird指针变量bird
        bird.name=@"百灵鸟";    //继承父类animal的方法写入名字
        bird.age=5;            //继承父类animal的方法写入年龄
        NSLog(@"名字:%@\t年龄:%d",bird.name,bird.age); //输出
        bird.wing=2; //给bird自身方法赋值
        [bird eat];  //调用父类animal的eat方法
        [bird run];  //调用父类方法run的重写
        [bird fly];  //调用bird自身的方法fly
        NSLog(@"%d岁的%@用%d支翅膀在天空飞翔!",bird.age,bird.name,bird.wing);//输出
   
    }
    return 0;
}

父类声明:

@interface Animal : NSObject
{  NSString *_name; //定义成员变量name
    int _age;       //定义成员变量age
}
-(void)setName:(NSString *)name;//name的set方法声明
-(NSString *)name;              //name的get方法声明
-(void)setAge:(int)age; //age的set方法声明
-(int)age;              //age的get方法声明
-(void)eat;
-(void)run;
@end
父类实现:
#import "Animal.h"
@implementation Animal
-(void)setName:(NSString *)name{ //name的set方法实现
    _name=name;}
-(NSString *)name{               //name的get方法实现
    return _name;}
-(void)setAge:(int)age{ //age的set方法实现
    _age=age;}
-(int)age{              //age的get方法实现
    return _age;}
-(void)eat{
    NSLog(@"animal在津津有味的吃着!");
}
-(void)run{
    NSLog(@"naimal在疯跑!");
}
@end
子类声明:

#import "Animal.h"

@interface Bird : Animal
{  int _wing;
}
-(void)setWing:(int)wing;
-(int)wing;
-(void)eat; //调用父类eat方法
-(void)fly;
-(void)run; //父类方法run的重写
@end

子类实现:

#import "Bird.h"
@implementation Bird
-(void)setWing:(int)wing{
    _wing=wing;}
-(int)wing{
    return _wing;}
-(void)eat{
  [super eat]; //通过super调用父类的方法
}
-(void)fly{
    NSLog(@"brid在天空自由的翱翔!");
}
-(void)run{  //父类方法run重写的实现
    NSLog(@"brid在疯跑!");
}
@end

3、继承的注意事项

    1)子类不能定义和父类同名的变量,但是可以继承父类的变量 ;

    2)OC类支持单一继承,不支持多继承 

    3)OC类支持多层继承 

4、继承体系中方法调用的顺序 

   1)在自己类中找
   2)如果没有,去父类中找
   3)如果父类中没有,就去父类的父类中 

   4)如果父类的父类也没有,就还往上找,直到找到基类(NSObject) 

   5)如果NSObject也没有就报错




  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值