关闭

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

标签: 指定初始化方法designated initializ初始化
251人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:82526次
    • 积分:2487
    • 等级:
    • 排名:第16667名
    • 原创:170篇
    • 转载:5篇
    • 译文:5篇
    • 评论:1条