主要内容:继承、初始化方法(重点)、便利构造器(重点)
一、继承
继承就是子类继承父类所有的实例变量和方法,父类有的,子类都有,但是子类有的,父类不一定有
继承的上层:父类,继承的下层:子类
继承是单方向的,不能相互继承
继承具有传递性:A继承于B,B继承于C,A具有B和C所有的特征和行为
把共有的方法和实例变量写到父类中,子类只需要写自己独有的实例变量和方法就可以了,这样大大简化了代码
继承既保证了类的完整,又能简化代码
如图所示:
为继承的实现
继承的特点:
1、OC中,只允许单继承
2、没有父类的类称为根类,OC中的根类是NSObject(祖宗)
3、继承的方式:全部都继承
4、如果子类不满意父类的方法,可以重写(overwrite)父类的方法
继承方法的执行:
super是编译器指令,并非对象
作用:给super发送消息,可以执行父类中的方法
注意:子类重写父类的方法,子类既有自己的实现,又有父类继承下来的实现,如果想使用父类的实现,向super发送消息
二、初始化方法
创建对象分为两步:开辟空间、初始化
主要内容:为某些实例变量赋初值
初始化方法在对象的整个生命周期里只使用一次
完整的初始化方法示例:
- (instancetype) init
{
/ / 先使用从父类继承过来的方法
self = [ super init ] ;
/ / 判断是否初始分成功
if (self) {
/ / 初始化设置
}
/ / 返回
return self ;
}
没学继承之前,没有self = [ super init ]字样,我们逐一为实例变量赋值
学习继承之后,父类中声明了公共的实例变量,作为父类,也应该有自己的初始化方法,为这些公共的实例变量赋初值
初始化过程:
1、自己的初始化方法中,优先调用父类的初始化方法,
2、父类的初始化方法在调用父类的初始化方法,依次向上调用
3、处于最上层的初始化方法完成后,回到第二层的初始化方法中完成第二层的初始化方法
4、回到第三层的初始化方法中,直到本类的初始化方法完成
初始化方法的特征:
1、初始化方法是 “ - ” 开始的
2、id 或者 instancetype类型的返回值
3、以init开头
内部实现:先执行super的初始化方法,在执行自身变量,return self;
指定初始化方法:
所谓指定初始化方法:就是一个类众多初始化方法中,无论使用哪个初始化方法,总有一个一个初始化方法被调用,这个初始化方法就被称为指定初始化方法
1、一个类可以有很多个初始化方法
2、通常会有一个指定的初始化方法
3、通常把参数最多的初始化方法作为指定初始化方法
4、每个类都有指定初始化方法,如果该类只有一个初始化方法,那么该初始化方法就是指定初始化方法
5、指定初始化方法负责向super发送消息
三、便利构造器
便利构造器在初始化方法的基础上前进了一步,,封装了对象创建过程
便利构造器是 “ + ” 方法,返回本类型的实例,方法名以类名开头
注意:内部实现,封装了alloc 和初始化方法,使用起来更方便