黑马程序员——OC语言基础——面向对象三大特性之多态

------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的世界中还有很多奥秘等着我去发现。

永远不能停止前进的脚步,勿忘初心。

你可能感兴趣的:(IOS)