OC-继承、初始化方法、便利构造器概念
2015-11-13 08:53
225 查看
继承的上层:父类 继承的下层:子类
继承是单向的,不能相互继承
继承具有传递性:A继承与B,B继承与C;A具有B和C的特征和行为
子类继承父类所有的特征和行为
面向对象提供了继承语法,能够简化代码,把共有的方法和实例变量写在父类里边,子类只需要写自己独有的实例变量和方法即可
继承既能保证类的完整性,又能简化代码
继承的特点:
OC中允许单继承
没有父类的类称为根类。OC中的根类是NSObject
继承的内容:所有实例变量和方法
如果子类不满足父类的方法实现,子类可以重写(overwrite)父类的方法
继承中方法执行:
如:A继承B B继承C C继承D D继承NSObject
[A eat]
给A对象发送消息eat
1.查找本类中实现或者重写eat方法
2.如果本类没有实现,就去上一级的父类去查找是否实现eat
3.逐级查找eat方法,直到找到执行为止
4.如果到最后一个类也没有实现eat方法,程序会崩溃
super是编译指令并非对象
作用:给super发送消息,可以执行父类中实现的方法,子类可以重写父类的方法,子类既有自己的实现又有父类继承下来的实现,如果要使用父类的实现,向super发送消息即可
初始化方法:
创建对象分两步:开辟空间 初始化
初始化方法的主要作用:为某些实例变量赋初值
初始化方法在整个对象生命周期内只调用一次
完整的初始化方法
-(id)init{
//给super发送init消息:即执行父类中的init方法
self = [super init];
if(self){
//子类自己的初始化设置
}
初始化完成,返回对象自己本身
return self;
}
学习继承之前,初始化方法并没有self = [super init];字样。我们为实例变量逐一赋值
学习继承之后,父类中声明了公共的实例变量,作为父类,因为有自己的初始化方法,为这些公共实例变量赋值
在自身初始化过程中,优先向super发送init方法。初始化公共变量,初始化成功后,在初始化自身特有的变量,从而完成所有实例变量的初始化
初始化过程:
1.自己的初始化方法中,优先调用父类的初始化方法
2.父类的初始化方中再调用父类的初始化方法,依次往上调用
3.处于最上层的初始化完成后,回到第二层初始化方法中,完成第二层初始化
4.第二层的初始化完成后,在返回到第三层的初始化方法中,一次执行初始化方法,直到本类完成初始化方法
初始化方法特征:
1.初始化方法用“-”方法
2.返回值是id或者instancetype类型
3.以init开头
4.可以带0到多个参数(也就是咱们的自定义初始化方法)
5.内部实现:先执行super的初始化方法,在初始化自身变量,最后return self
便利构造器:在初始化方法的基础上前进了一小步,封装了对象的创建过程(也就是把alloc init方法封装到对象内部)
便利构造器“+”方法,只能类去调用,可以添加参数
内部实现:封装了alloc init
方法,使用起来更简洁。
继承是单向的,不能相互继承
继承具有传递性:A继承与B,B继承与C;A具有B和C的特征和行为
子类继承父类所有的特征和行为
面向对象提供了继承语法,能够简化代码,把共有的方法和实例变量写在父类里边,子类只需要写自己独有的实例变量和方法即可
继承既能保证类的完整性,又能简化代码
继承的特点:
OC中允许单继承
没有父类的类称为根类。OC中的根类是NSObject
继承的内容:所有实例变量和方法
如果子类不满足父类的方法实现,子类可以重写(overwrite)父类的方法
继承中方法执行:
如:A继承B B继承C C继承D D继承NSObject
[A eat]
给A对象发送消息eat
1.查找本类中实现或者重写eat方法
2.如果本类没有实现,就去上一级的父类去查找是否实现eat
3.逐级查找eat方法,直到找到执行为止
4.如果到最后一个类也没有实现eat方法,程序会崩溃
super是编译指令并非对象
作用:给super发送消息,可以执行父类中实现的方法,子类可以重写父类的方法,子类既有自己的实现又有父类继承下来的实现,如果要使用父类的实现,向super发送消息即可
初始化方法:
创建对象分两步:开辟空间 初始化
初始化方法的主要作用:为某些实例变量赋初值
初始化方法在整个对象生命周期内只调用一次
完整的初始化方法
-(id)init{
//给super发送init消息:即执行父类中的init方法
self = [super init];
if(self){
//子类自己的初始化设置
}
初始化完成,返回对象自己本身
return self;
}
学习继承之前,初始化方法并没有self = [super init];字样。我们为实例变量逐一赋值
学习继承之后,父类中声明了公共的实例变量,作为父类,因为有自己的初始化方法,为这些公共实例变量赋值
在自身初始化过程中,优先向super发送init方法。初始化公共变量,初始化成功后,在初始化自身特有的变量,从而完成所有实例变量的初始化
初始化过程:
1.自己的初始化方法中,优先调用父类的初始化方法
2.父类的初始化方中再调用父类的初始化方法,依次往上调用
3.处于最上层的初始化完成后,回到第二层初始化方法中,完成第二层初始化
4.第二层的初始化完成后,在返回到第三层的初始化方法中,一次执行初始化方法,直到本类完成初始化方法
初始化方法特征:
1.初始化方法用“-”方法
2.返回值是id或者instancetype类型
3.以init开头
4.可以带0到多个参数(也就是咱们的自定义初始化方法)
5.内部实现:先执行super的初始化方法,在初始化自身变量,最后return self
便利构造器:在初始化方法的基础上前进了一小步,封装了对象的创建过程(也就是把alloc init方法封装到对象内部)
便利构造器“+”方法,只能类去调用,可以添加参数
内部实现:封装了alloc init
方法,使用起来更简洁。
相关文章推荐
- 第十周项目3-用二叉树遍历思想解决问题(1)&(2)
- 描述文件
- WindowFlag
- 快速排序算法
- HttpClient 4.0的使用详解
- 第六周:项目1建立顺序栈算法库
- java实现打印套打功能
- cocos2D v3.4 在TileMap中开启高清显示
- 第八周 项目2-建立链串的算法库
- 第十一周 项目1-验证算法(4)
- 第八周 项目1 建立顺序串的算法库
- Mac OSX环境下搭建本地服务器
- cocos2D v3.4 在TileMap中开启高清显示
- cocos2D v3.4 在TileMap中开启高清显示
- virtualenv -- python虚拟沙盒
- android 倒影
- Java异常处理中的一些特殊情况举例
- Win10正式版10240升级安装Win10 TH2正式版10586图文教程
- jquery转盘抽奖功能实现
- 第十一周 项目1-验证算法(3)