------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
继前两篇博文梳理了一下我对OC中面向对象三大特性的封装、继承之后。最重要也是最不容易理解的多态概念终于到来。
个人认为多态在三大特性中是最为重要的,但是由于它的概念性不容易用语言描述清楚,所以我还是想引用视频教程中老师说的那句经典。
多态的实质就是:
父类的指针 指向了 子类的对象。
下面是个人练习时写的一个小小的说明:
Computer *c = [Laptop new];
上面就是一个多态的具体例子:
它由父类的指针(电脑类Computer作为定义类型,定义了c这个电脑类的指针变量) 指向了(=) 子类的对象(笔记本电脑类Laptop作为了实际类型)。
下面是一段代码:
//下面是通常我们没有使用多态的情况 Computer *cpt = [Computer new]; [cpt show]; Laptop *lap = [Laptop new]; [lap show]; AIO *aio = [AIO new]; [aio show]; //使用多态 Computer *cp = [Laptop new]; [cp show];
还是以上面Computer电脑类为父类,Laptop笔记本电脑类和AIO一体机电脑类均为电脑类的子类。
而这些计算机设备都有用来现实系统信息的Show方法。
众所周知,笔记本的信息中要比普通台式机多显示出【电池】信息,而一体机相比台式则要多显示一项【显示器】信息。
这样,我们就不可避免的要在Computer类中加入ShowLaptop和ShowAIO两个方法,以实现多样化的需求。
乍一看起来,好像这也没什么。但是。。。
当我们要添加一个平板电脑类,我们是不是需要显示更多系统信息?
当我们要添加一个手机类(另一种形式的计算机),我们是不是需要显示更多系统信息?
当我们要添加一个智能穿戴设备类,我们是不是需要显示更多系统信息?。。。 。。。等等
当后期功能不断加强,我们的类会不可避免的越来越臃肿。
这时,我们若是使用多态呢?我们只需要在Computer中声明一个Show方法,之后的具体实现就交给子类本身就可以了。
这就是多态的好处。
虽说OC中面向对象的三大特性到这里就总结完毕了,但是实际上我也是一个OC语言的学习者,在OC的世界中还有很多奥秘等着我去发现。
永远不能停止前进的脚步,勿忘初心。