java学习回顾---多态

多态的作用是定义一种扩展功能,比如现在动物这个父类里有猫和狗两项,动物都要吃饭,但是吃的东西不同,所以定义了abstract属性的吃饭函数在父类里。每当一个子类继承动物父类时都要重写eat()来确定吃的东西。在主函数里,我们想要知道某一动物的吃的内容时总要创建子类的新对象来完成函数。为了方便,我们将让对象吃饭这个过程封装在一个函数里。可是当我们想要在动物这个父类里添加新的子类,比如猪时,我们就要先建立一个函数来存放让猪对象吃饭的过程,这样每次添加新子类都要额外添加新函数,很麻烦。为了解决这个问题,可以在函数里用多态表示参数,这样多个子类都可以用同一个函数。

在这里插入图片描述
**在这里插入图片描述**
在这里插入图片描述
如果不使用多态的话,以后每多一个动物类就要多写一个function或者新建这个类的对象来调用eat方法。
在这里插入图片描述
使用了多态之后,只要是动物类都可以调用这个函数,以后就算有新的动物类也不用再新写函数了

使用多态时的向上,向下转型

在这里插入图片描述
多态的转换至始至终只有子类才可以转换,当父类引用指向了子类时,这个父类引用可以向上转换成父类,也可以强制转换回子类。

在这里插入图片描述

多态编译,运行时的判断error标准

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述把f.method3()注释掉之后,运行的结果是zi method_1 fu method_2,因为运行的时候看的是右边。
静态函数和成员变量参照的均为左边。(成员变量即int num这类的东西)

示例

在这里插入图片描述
在这里插入图片描述
以上这两段代码固定之后就不需在修改了,相当于固定一个格式来扩展程序。

在这里插入图片描述
此后还有什么功能需要补充的话就多建立分类即可,不用改变主板及接口。

在这里插入图片描述
使用多态可以降低功能函数与主程序的耦合性,相当于在功能函数和主程序之间找了个中介,符合中介规则的才会传输给主函数,不符合的就不会。
接口的功能,当主程序想要调用功能函数的时候,如果不用接口而是在主程序中直接调用功能函数,这时如果要调用新的功能函数,我们就要修改主程序。如果用了接口,不管是不是新的功能函数,主函数调用的都是接口,这样主函数就不用修改,我们只需让新的函数符合接口的规则即可。

多态在实际中的运用

当需要用到比较功能的时候可以用object类的equals函数(object是所有类的父类)。注意:需要进行向下转换,同时也要先行判断需判断的两类事物是不是同类。
在这里插入图片描述
调用的格式即d1.equals(d2)

猜你喜欢

转载自blog.csdn.net/weixin_46428711/article/details/110472246