ios开发基础学习笔记(三)--多态
大家好,我是milo,这次的文章讲的是----多态。我们知道面向对象的三大特征分别是,封装,继承,多态。在这三个特征中,多态的出现是最少的,但就因为出现次数最少,所以需要时常巩固巩固。
在面向对象中(不光是oc语言),多态的出现需要满足三个条件:
1、必须要有继承关系
2、子类要重写父类的方法
3、父类指针指向子类对象
下面将通过一个例子,和一个使用场景来巩固多态的思想。
-------------------------------------------------------------------------------------------
例子部分:
创建一个动物类JJAnimal,里面只有一个eat的方法,下图是eat的实现。

创建一个狗类JJDog,继承动物类JJAnimal,JJDog就会继承JJAnimal的eat方法。重写JJDog的eat的如下:

开始实现,使用JJAnimal指针指向JJDog对象,然后,JJDog调用eat方法。

结果如下,使用多态后子类调用的方法,是子类重写过后方法。即不是“动物 吃”,是“小狗 吃”。

-------------------------------------------------------------------------------------------
使用场景部分:
很多人会问了,多态的使用这么奇怪,真的有应用场景吗?有的,下面就延续上面的动物类,狗类的例子,接着将多态代入使用场景。
使用场景是:有一个管理员,他有一个给动物喂食的方法,动物当然包括狗啊,猫啊,大象啊。。。等等各类动物。他应该怎么设计这个方法?是不是要给每一种动物,都设计一个方法,是像下面这样子吗?

为了让我们的代码更高效,简洁,我们应该使用多态的思想,即只需像下图那样设计方法。管理员类JJManager,只有一个feed方法,参数是JJAnimal,当我们在外部传入不同的动物作为参数时,就已经满足了多态的三个条件:1、继承,2、重写,3、父类指针指向子类对象

在外面实现并且调用

结果如下:

使用多态后,无论是小猫,小狗,小猴。。。还是什么动物,只需要子类进行相应方法的重写后,就可以非常简洁地使用[manager feed:某某动物]一句代码,搞定一切!