学习Java我们知道类有三大特征,封装,继承,多态。而在Objective-C中也有继承的概念,今天就来看看Objective-C中的继承和多态。
首先,我们来看看示例代码:
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
data.plist文件
1 |
|
1 |
|
继承
继承是类中的一个重要的特性,它的出现使得我们没必要别写重复的代码,可重用性很高。当然Objective-C中的继承和Java中是一样的,没多大区别。不仅仅Java,C++也有继承特性,但C++支持多继承,而Objective-C不支持多继承。
概念:
(1)超类(superclass),是你所继承的类。例如,Panda的超类是Animal,Animal的超类是NSObject。
(2)父类(parentclass),是超类的另一种表达方式。例如,Animal是Panda的父类。
(3)子类(subclass),是实施继承的类。例如,Panda是Animal的子类。
(4)孩子类(childclass),是子类的另一种表达方式。例如,Panda是Animal的孩子类。
继承的工作机制:
(1)方法调度
当代码发送消息时,Objective-C的方法调度程序将在当前类中搜索相应的方法。如果调度程序无法在接收消息的对象类中找到相应的方法,它就在该对象的超类中进行查找。
(2)实例变量
接下来我们看看Objective-C如何访问实例变量。创建一个新类时,其对象首先从自身的超类中继承实例变量,然后(可选)添加它们自己的实例变量。
最后,说说重写方法,制作自己全新的子类时,通常需要添加自己的方法。有时,为了在类中引入某个独特的特性,需要添加新方法。还有些时候,可能需要替换或增强由这个新类的某个超类所定义的现有方法。当遇到我们子类特有的方法时,则只需要在子类中重写该方法即可。
多态
在Objective-C中,多态就是指,父类指针可以指向子类。
1 |
|
上例代码中的从字典中获取数据的类方法就很好地使用了多态。该方法主要是从字典中读取数据,示例中只有Panda一个子类,若是以后拥有更多的类,那么该功能的方法需要为每一个子类写一个方法,而使用多态特性,则只需根据传入的参数进行分别处理即可,减少代码冗余问题。