关闭

Objective-C 编程全解-第03章 类和继承

标签: 指定初始化方法designated initializ初始化
294人阅读 评论(0) 收藏 举报
分类:

03类和继承

3.1 继承的概念

3.1.1 父类和子类

    继承(inheritance):通过扩展或则修改既有类来定义新类的方法叫做继承。

    父类(superclass):在继承关系中,被继承的类称为父类。

    子类(subclass):继承关系中相对于父类的新建的类称为子类。

    重写(override):子类中重新定义父类的方法叫做重写。

    另外,在集合用语中,子集指的是比较小的集合(相对于父集),但在类的情况下子类一般是父类的扩展。为了避免这种命名上的混乱,C++中把父类称为基类(base class),把子类称为派生类或导入类(derived class)。

3.1.2 类的层次结构

    类层次结构(class hierarchy):由类以及子类以及子类的子类等构成的树形结构,这样的树称为类层次结构。

    位于类层次最顶端的类称为根类(root class)。

    NSObjectCocoa环境下几乎所有类的根类。


3.2 利用继承定义新类

3.2.1 继承的定义

3.2.2 类定义和头文件

3.2.3 继承和方法调用

    superself不同,并不确定指向某个对象。所以super只能被用于调用父类的方法,不能通过super完成赋值,也不能把方法的返回值指定为super

3.2.4 调用父类的方法

3.2.5 初始化方法的定义

    注意要调用父类的init方法,父类的init方法会初始化父类中定义的实例变量。执行时父类的初始化方法可能出错,因此要做nil判断。


3.3 使用继承的程序示例

3.3.1 追加新方法的例子

3.3.2 方法重写的例子


3.4 继承和方法调用

3.4.1 使用self调用方法

    self指的是收到当前消息的实例变量。

3.4.2 使用super调用方法

    super调用的是父类的方法,而至于到底用了哪个方法则是由编译时类的继承关系决定的。

3.4.3 测试程序


3.5 方法定义时的注意事项

3.5.1 局部方法

    .m中实现的方法,只要方法存在,即使不在.h中声明,只要发送了对应的消息,就能够执行。

3.5.2 指定初始化方法

    指定初始化方法(designated initializer)就是指能确保所有实例变量都能被初始化的方法,这种方法是初始化的核心,类的非指定初始化方法(secondary initializer)会调用指定初始化方法完成初始化。通常,接收参数最多的初始化方法就是指定初始化方法。

    子类的制定初始化方法,必须调用超类的指定初始化方法。

    如果子类想重写父类中的指定初始化方法,就一定要调用父类的指定初始化方法,而不是调用父类的非指定初始化方法。原因是非指定初始化方法内部会调用指定初始化方法,造成递归循环调用,无法终止。

1
0
查看评论

Objective-C编程(第3版)

ios开发  Advanced.Mac.OS.X.Programming.The.Big.Nerd.Ranch.Guide,.Mark.Dalrymple,.Big.Nerd.Ranch,.2011.pdf:http://www.t00y.com/file/41282496 ...
  • Cloud_Strife_1985
  • Cloud_Strife_1985
  • 2013-12-07 20:16
  • 2714

objective-C 编程全解-第15章 消息发送模式 中

第15章 消息发送模式 中 1:方法名相同,即使在不同的类当中@selector()得到的值也是相同的,如下: InvocationTest类: NSLog(@"%ld",@selector(invocationTestFuncB));//43650...
  • u014222687
  • u014222687
  • 2016-07-07 11:45
  • 376

《Objective-c编程全解》(荻原刚志)笔记

oc是动态语言,需要编译环境和运行时系统 来 执行编译好的代码。      运行时系统:相当于oc的操作系统,负责完成对象的生成,释放时的内存管理,为发来的消息查找对应方法。      -(NSUinteger)retainCount ...
  • BelugaW
  • BelugaW
  • 2016-04-17 12:22
  • 222

Objective-C 编程全解-第02章 Objective-C程序设计

第02章 Objective-C程序设计 2.1 对象和消息 2.1.1 消息表达式     消息表达式(message expression):如         id obj;     ...
  • u014222687
  • u014222687
  • 2016-05-30 21:11
  • 365

《Objective-C编程全解》 读书笔记 第三章 继承

《Objective-C编程全解》 读书笔记 第三章 继承
  • qq_33033983
  • qq_33033983
  • 2017-03-04 11:11
  • 73

Python核心编程(第十三章)--面向对象编程

面向对象编程主要是类和类的实例 创建类: class MyNewObjectType(bases): 'define MyNewObjectType class' class_suite 关键词是class,紧接着是一个类名,随后是定义类的类体代码 object是所有...
  • u014380159
  • u014380159
  • 2016-06-02 15:43
  • 467

Objective-c:封装、继承与多态

面向对象的三个基本特征是:封装、继承、多态。封装简介 封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被成为抽象数据类型。 封装的意义在于保护和防止代码(数据)被我们无意中破坏。在面向对象程序设计中,数据被看作是一个中心的元素并且和使用...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015-11-13 00:07
  • 1806

c++ primer plus(第6版)中文版 第十三章编程练习答案

第十三章编程练习答案 13.1根据Cd基类,完成派生出一个Classic类,并测试 //13.1根据Cd基类,完成派生出一个Classic类,并测试 #include #include using namespace std; // base class class Cd { char ...
  • gd275313
  • gd275313
  • 2014-05-26 22:31
  • 1233

Android编程权威指南(第二版)学习笔记(二十三)—— 第23章 HTTP 与后台任务

本章主要讲了如何使用 android 系统的网络连接,并介绍了格式化 JSON 和多线程编程 AsyncTask 的使用。另外,挑战练习里还结合了 Gson 库的使用。
  • kniost
  • kniost
  • 2017-02-11 17:21
  • 576

《集体智慧编程》第4章 搜索与排名 个人笔记

第4章 搜索与排名1、基于内容的排名 2、利用外部回指链接 3、点击行为中学习
  • Amber07
  • Amber07
  • 2017-05-02 17:36
  • 383
    个人资料
    • 访问:92658次
    • 积分:2575
    • 等级:
    • 排名:第16767名
    • 原创:170篇
    • 转载:5篇
    • 译文:5篇
    • 评论:1条