一、多态的概念
多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表现出不同的状态,比如说一个父类Person有Student、Worker、 Teacher、 Farmer 四个子类,在运行的时候如果实例化的子类是Student则此时Person表现是学生的行为、如果实例化的子类是Worker则此时Person表现是工人的行为,这就是父类表现出来的多态,类的多态的表现就是向上转型和向下转型。
方法的多态就是一个方法名称却有不同的实现,其实就是方法的重载,在调用方法的时候具体调用哪一-个是在运行期根据传递的实际参数的类型来确定调用哪一个方法,也就是同一个方法名称可以有不同的表现形式,这就是方法的多态。方法多态的表现就是方法的重载。
二:类多态的好处
思考一个需求:有四个类Student、Worker、 Teacher、 Farmar, 要求在一个 类中定义方法来将以上的类作为方法的参数接受。现在能想到可以使用方法的重载接受。
DEMO:方法的重载解决需求
![](https://img.haomeiwen.com/i19872357/bf0745dc6e7b986a.png)
![](https://img.haomeiwen.com/i19872357/91fd78279b45bee2.png)
![](https://img.haomeiwen.com/i19872357/f315ef9051e134ff.png)
![](https://img.haomeiwen.com/i19872357/c4bb603b177a01a8.jpg)
![](https://img.haomeiwen.com/i19872357/8cd397487fc24837.jpg)
![](https://img.haomeiwen.com/i19872357/8da074486638b192.jpg)
![](https://img.haomeiwen.com/i19872357/f9448973d759d37e.jpg)
![](https://img.haomeiwen.com/i19872357/4920dbef04ca026f.jpg)
![](https://img.haomeiwen.com/i19872357/c6b284ae24988809.jpg)
此时可以使用重载方法实现需求,但是存在很大的弊端,假如有一万个类型需要接受那么需要在Aplay中重载方法一万次,这样的代码应变性不高,耦合度高,依赖性强,此时我们可以使用多态的特征解决(向上转型),可以将接受参数的方法的参数类型定义为所有类的父类。
DEMO:使用多态实现
![](https://img.haomeiwen.com/i19872357/8b2f4a2a2645644c.png)
![](https://img.haomeiwen.com/i19872357/4d2602f23a59f04d.jpg)
![](https://img.haomeiwen.com/i19872357/6df0e756f1233cba.jpg)
![](https://img.haomeiwen.com/i19872357/04cc5b2e514b16cb.jpg)
![](https://img.haomeiwen.com/i19872357/b524e3d78833983e.jpg)
![](https://img.haomeiwen.com/i19872357/27960d701261e3f4.png)
![](https://img.haomeiwen.com/i19872357/4d563c239f78910c.jpg)
![](https://img.haomeiwen.com/i19872357/0b25aa19212257a3.jpg)
此时Aplay类中的getInfo方法就不需要重载了,这就是多态的好处的直接体现
![](https://img.haomeiwen.com/i19872357/9c46ffd277f85924.jpg)
学习不要走马观花的学,每个知识重点大纲,就是学习路线都是根据每一天市场上多数公司用到的新技术整理,在学习的时候还需要结合练习题来做这里的话我也将我之前在学习过程中用到的一些学习资料整理成了文档,以及我自身之前的一个面试文案和知识点补充,有需要的朋友可以加我的QQ群697888503,这里也希望大家最终都能够学有所成,学习编程不是一天两天的功夫,勤能补拙才是硬道理,祝大家最终都能成为一名合适开发攻城狮。
网友评论