Objective-C基础教程学习笔记(四)继承
编写面向对象的程序时,所创建的类和对象之间存在一定的关系。它们协同工作才能实现程序相应的功能。
处理类和对象间的关系时,尤其要重视OOP的两个方面。第一方面是继承。创建一个新类时,通常需要定义新类以区别于其它类及现有类。使用继承可以定义具有父类所有功能的新类,它继承了父类的这些功能。
另一个和类有关的OOP技术是复合(composition)。在复合中,对象可以引用其它对象。例如,游戏过程中,赛车模拟程序中的汽车对象有4个轮胎对象。对象引用其它对象时,可以利用其它对象提供的特性,这就是复合。
为何使用继承
对于一些类接口非常类似,含有大量的重复的内容,会影响程序的执行效率。进行编程时,出现这样的重复内容就表明它是一个不好的架构。你需要维护两倍的代码,个性代码时,必须在两处或多处修改,这将大大增加出错的可能性。如果忘记更改某处的代码,有可能出现一些奇怪的bug。
如果能将所有重复的内容在一个地方统一就太好了!如果我们还能在需要的地方添加自定义的方法,那就更好了。继承恰好是实现该功能的强大OOP特性。OOP继承表明一个类从另一个类(它的父类或超类)中获取了某些特性。
继承语法
@interface Circle:NSObject
冒号后的标识符是需要继承的类。在Objective-C中,可以从非类中继承对象,但是如果使用Cocoa,会希望从NSObject继承对象,因为NSObject提供了大量有用的特性。
只能继承一个
Objective-C不支持多继承。可以通过Objective-C其它特性获取多继承的优点,例如分类(第12章)和协议(第13章)。
超类/父类、 子类/孩子类
子类可重写超类的方法。
继承的工作机制
方法调度
当代码发送消息时,Objective-C的方法调度程序将在当前类中搜索相应的方法。如果调度程序无法在接收消息的对象类中找到相应的方法,它就在该对象的超类中进行查找。
实例变量
创建一个新类时,其对象首先从自身的超类中继承实例变量,然后添加它们自己的实例变量。
super 关键字
使用超类的特性,使用super。