3、继承、初始化⽅法、便利构造器

继承

  • 上层:父类;下层:子类
  • 继承是单向的,不能相互继承
  • 集成具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为
  • 子类能继承父类全部的特征和行为
  • 把公共的⽅法和实例变量写在父类⾥里,子类只需要写⾃⼰己独有的实例变量和方法即可
  • 继承既能保证类的完整,又能简化代码
  • 没有父类的类称为根类,OC中的根类是NSObject(祖宗)

继承实现

//          子类            父类
@interface CommonZombie : NSObject{

}

#import "CommonZombie.h"

//            子类              父类
@interface BarricadeZombie : CommonZombie{

}

继承中方法的执行:逐级向上查找

给CollegeStudent对象发送消息: study

  1. 查找本类中是否实现(重写)study⽅法
  2. 如果没有,查找⽗类中study是否实现
  3. 逐级向上查找,找到即执⾏
  4. 如果NSObject也没实现,会抛出异常,引起Crash

super

super是编译器指令,并⾮对象。
作⽤:给super发消息,可以执⾏⽗类中实现的⽅法

⼦类可以重写⽗类的⽅法,即:⼦类既有⾃⼰的实现,⼜有⽗类继承下来的实现,如果想使⽤⽗类的实现,向super发送消息


初始化⽅法

创建对象分两步:开辟空间、初始化。
初始化⽅法的主要作⽤是:为某些实例变量赋初值。
初始化⽅法在对象的整个⽣命周期⾥只使⽤⼀次。

- (id) init
{
    //给super发送init消息:即执行父类中实现的init方法
    self = [super init];
    if(self)
    {
        //初始化设置
    }
    //返回初始化完成的对象
    return self;
}

⼦类定义了除⽗类中公共实例变量之外的实例变量。在⾃⾝的初始化⽅法中,优先向super发送init消息,初始化公共变量,初始化成功之后,再初始化⾃⾝特有变量,从⽽完成全部实例变量的初始化

初始化过程

  1. ⾃⼰的初始化⽅法中,优先调⽤⽗类的初始化⽅法
  2. ⽗类的初始化⽅法中再调⽤⽗类的初始化⽅法,依次往上调⽤
  3. 处于最上层的初始化完成之后,回到第⼆层的初始化⽅法中,完成第⼆层的初始化
  4. 第⼆层的初始化完成之后,回到第三层的初始化⽅法中,依次执⾏初始化⽅法,直到本类的初始化⽅法完成

初始化⽅法特征

  • 初始化⽅法是 “-”⽅法(对象方法)
  • 返回值类型是:id或者instancetype
  • 以init开头
  • 可以带0到多个参数
  • 内部实现:先执⾏super的初始化⽅法,再初始化⾃⾝变量,return self

便利构造器

  • 封装了对象创建过程
  • 便利构造器是“+”⽅法,返回本类型的实例,⽅法名以类名开头
  • 可以有0到多个参数
  • 内部实现:封装了alloc和初始化⽅法。使⽤起来更加简洁

便利构造器的实现

//声明和实现便利构造器
+(id)personWithName:(NSString *)name
{
    Person *p =[[Person alloc] initWithName:name];
    return p;
}
//使用便利构造器创建对象
Person *p = [Person personWithName:@"张三"];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值