iOS学习11之OC继承
面向对象的三大特性:封装,继承,多态。
1、继承
继承既能保证类的完整,又能简化代码。
把公共的⽅法和实例变量写在⽗类⾥,⼦类只需要写⾃⼰独有的实例变量和⽅法即可。
继承是⾯向对象三⼤特性之⼀,合理的继承,能减少很多冗余代码,加快开发速度。
1> 继承的特点:
继承的上层:父类,继承的下层:子类。
继承的内容:所有实例变量和方法。
继承是单向的,不能相互继承。
继承具有传递性:A继承与B,B继承与C,A具有B和C的特征和行为。
如果子类不满意父类方法的实现,可以重写(overwrite)父类的方法。
2> super
super是编译器指令,并⾮对象。
作⽤:给super发消息,可以执⾏⽗类该⽅法的实现 。
重写从⽗类继承过来的⽅法的三种情况:
• 完全以⼦类的实现内容为主,丢弃⽗类实现的内容。
• 完全以⽗类的实现内容为主,没有⼦类实现的内容。
• 既有⽗类对该⽅法的实现,也有⼦类对该⽅法的实现。
3> 消息发送机制
2、初始化方法
1> 初始化方法
初始化⽅法的主要作⽤是:为某些实例变量赋初值。
初始化⽅法在对象的整个⽣命周期⾥只使⽤⼀次。
注:初始化⽅法是在对象的初始化阶段完成其实例变量的赋值操作,⼀个对象的初始化阶段只有⼀次,所以初始化⽅法只使⽤⼀次。
- (id)init {
//给super发送init消息:执⾏⽗类中实现的init⽅法
self = [super init];
//判断从⽗类继承过来的init⽅法是否初始化成功
if (self) {
//初始化设置
}
//返回初始化完成的对象
return self;
10 }
⼦类定义了除⽗类中公共实例变量之外的实例变量。
在⾃⾝的初始化⽅法中,优先向super发送init消息,初始化公共变量, 初始化成功之后,再初始化⾃⾝特有变量,从⽽完成全部实例变量的初始化。
2> self
self是系统关键字。 self在⽅法中指代当前⽅法的调⽤者。
self在实例⽅法中,指代调⽤当前⽅法的对象。
- (void)objectMethod { }
self在类⽅法中,指代当前类。
+ (void)classMethod { }
3> 初始化方法特征
• 初始化⽅法是 "_"⽅法。
• id 或者 instancetype 类型的返回值。
• 以init开头。
• 可以带 0 到多个参数。
内部实现:先执⾏super的初始化⽅法,再初始化⾃⾝变量,后return self
4> 初始化过程
- ⾃⼰的初始化⽅法中,优先调⽤⽗类的初始化⽅法。
- ⽗类的初始化⽅法中再调⽤⽗类的初始化⽅法,依次往上调⽤。
- 处于最上层的初始化完成之后,回到第⼆层的初始化⽅法中, 完成第⼆层的初始化。
- 第⼆层的初始化完成之后,回到第三层的初始化⽅法中,依次执⾏初始化⽅法,直到本类的初始化⽅法完成。
5> 指定初始化方法
命名规则:以initWith开头,后面跟上参数列表
- (id)initWithName:(NSString *)name gender:(NSString *)gender {
self = [super init];
if (self) {
_name = name;
_gender = gender;
}
return self;
}
3、便利构造器
1> 封装了对象创建过程
内部实现:封装了alloc和初始化操作,创建对象更加⽅便快捷。
2> 特征
• 便利构造器是 "+" ⽅法。
• 返回本类型的实例。
• ⽅法名以类名+ With + 参数列表。
• 可以有 0 到多个参数。
3> 便利构造器声明,实现和调用
声明:
+ (id)personWithName:(NSString *)name gender:(NSString *)gender;
实现:
+ (id)personWithName:(NSString *)name gender:(NSString *)gender { return [[Person alloc] initWithName:namegender:gender]; }
调用:
Person *per = [Person personWithName:@"Frank" gender:@"男"];
iOS学习11之OC继承的更多相关文章
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- iOS学习17之OC内存管理
1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- 【IOS学习基础】OC类的相关
几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...
- iOS学习15之OC集合
1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...
- iOS学习之Object-C语言继承和初始化方法
一.继承 1.面向对象的三大特性:封装,继承,多态. 面向对象提供了继承特性.把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可.继承既能保证类的完整,又能简化代码. ...
- iOS学习19之OC类的扩展
为一个类扩展功能:1.子类化:2.修改源代码:3.定义协议:4.Category:类目 1.Category 1> Category的作用 Category:也叫分类,类目,是为没有源代码的类扩 ...
- iOS学习16之OC集合遍历和数组排序
1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...
- iOS学习14之OC NSNumber + NSValue
1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...
随机推荐
- JS判断IE版本并在页面显示内容
<script type="text/javascript"> var isIE = function (ver) { var b = document.createE ...
- Android-----overridePendingTransition的使用
1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个activity退出时的动画:另外一部分时第二个activity进入时 ...
- Mac系统下使用VirtualBox虚拟机安装win7--第三步 在虚拟机上安装 Windows 7
第三步 在虚拟机上安装 Windows 7 等待虚拟机进入 Windows 7 的安装界面以后,在语言,货币,键盘输入法这一面,建议保持默认设置,直接点击“下一步”按钮,如图所示
- windows服务 - C# U盘升级
1.左侧工具栏里有Timer控件,但是如果调用的是系统时间,就需要添加System.timer.timer空间下的控件. 2.服务编写之后,还不能由SCM(服务控制管理器)进行管理,需要给该服务添 ...
- 玩玩Excel下的Power View
作为微软平台下的数据展示工具,Power View是一个不错的选择.而在Excel 2013下,即使你没有SharePoint的实例那么你也可以玩转它.此篇讲对Excel 2013下的Power Vi ...
- 1-03 Sql Sever 的身份验证模式
身份验证分为: 1:Windows身份验证. 1:Sql Sever身分验证. 每种验证的具体方式: 1Windows的验证方式 点击下拉框,有这两种验证方式,Windows验证只需要启动服务即可. ...
- 搭建Mantis 缺陷管理系统(转)
转自 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written i ...
- 外键为','(逗号)拼接ID,连接查询外键表ID
select distinct pipeId=substring(a.PipeIn,b.number,charindex(',',a.PipeIn+',',b.number)-b.number) fr ...
- HDU 2242 考研路茫茫——空调教室 无向图缩环+树形DP
考研路茫茫——空调教室 Problem Description 众所周知,HDU的考研教室是没有空调的,于是就苦了不少不去图书馆的考研仔们.Lele也是其中一个.而某教室旁边又摆着两个未装上的空调,更 ...
- 删除表数据drop、truncate和delete的用法
说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...