面向对象的三大特性:封装,继承,多态。

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继承的更多相关文章

  1. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

  2. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  3. iOS学习10之OC类和对象

    本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...

  4. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  5. iOS学习15之OC集合

    1.数组类 1> 回顾C语言数组 数组是一个有序的集合, 来存储相同数据类型的元素. 通过下标访问数组中的元素,下标从 0 开始. 2> 数组 数组是一个有序的集合,OC中的数组只能存储对 ...

  6. iOS学习之Object-C语言继承和初始化方法

    一.继承 1.面向对象的三大特性:封装,继承,多态.      面向对象提供了继承特性.把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法即可.继承既能保证类的完整,又能简化代码. ...

  7. iOS学习19之OC类的扩展

    为一个类扩展功能:1.子类化:2.修改源代码:3.定义协议:4.Category:类目 1.Category 1> Category的作用 Category:也叫分类,类目,是为没有源代码的类扩 ...

  8. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  9. iOS学习14之OC NSNumber + NSValue

    1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...

随机推荐

  1. 按键的使用(一)------verilog

    按键在项目中应用还是很频繁的,这里主要介绍按键的几种用法. 1.按下一次有效:按下一次计数器增加一下. 2.按下连续有效:按下不松,计数器就一直增加. 3.按下无效,松开有效:按下时计数器值不变,按键 ...

  2. 关于JAVA的String类的一些方法

    一.得到字符串对象的有关信息 1.通过调用length()方法得到String的长度. String str=”This is a String”; int len =str.length(); 2. ...

  3. MVC – 6.控制器 Action方法参数与返回值

      6.1 Controller接收浏览器数据   a.获取Get数据 : a1:获取路由url中配置好的制定参数: 如配置好的路由: 浏览器请求路径为: /User/Modify/1 ,MVC框架获 ...

  4. 重温WCF之WCF中可靠性会话(十四)

    1.WCF中可靠性会话在绑定层保证消息只会被传输一次,并且保证消息之间的顺序.当使用TCP(Transmission Control Protocol,传输控制协议)通信时,协议本身保证了可靠性.然而 ...

  5. 突破python缺陷,实现几种自定义线程池 以及进程、线程、协程的介绍

    Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import t ...

  6. 无废话ExtJs 入门教程十四[文本编辑器:Editor]

    无废话ExtJs 入门教程十四[文本编辑器:Editor] extjs技术交流,欢迎加群(201926085) ExtJs自带的编辑器没有图片上传的功能,大部分时候能够满足我们的需要. 但有时候这个功 ...

  7. 设置SecureCRT会话的缓冲区大小

    转自:http://blog.csdn.net/imxiangzi/article/details/7457703 在使用SecureCRT操作设备时,默认的回滚行数为500行.可以通过打开[选项]- ...

  8. memcached的最佳实践方案

    基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...

  9. linux网络协议

    网络协议 本章节主要介绍linxu网络模型.以及常用的网络协议分析以太网协议.IP协议.TCP协议.UDP协议 一.网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 ...

  10. 智能车学习(四)—— Cmp学习

    一.代码共享 1.cmp.h #ifndef HSCMP_H #define HSCMP_H //1 头文件 #include "common.h" //2 宏定义 //2.1比较 ...