当前位置: 首页 > 科技观察

说“空话”,办实事:说说多态

时间:2023-03-21 00:09:30 科技观察

1。什么是多态?多态性是码农必须理解的一个基本思想,是面向对象的基石。但是很多人(包括我)在刚接触多态的时候都会一头雾水:这个东西有什么用?Java中多态的例子很简单,每个初学者都会遇到:没什么,不就是把Apple这个类的实例赋值给抽象类Fruit,然后我们调用相关方法的时候,方法实际上执行的是Apple类的方法,而不是Fruit的方法。何必呢?为什么要将子类的实例分配给父类?没必要,最好直接:applea=newApple();a.getPrice()-->return5.0fa.getName()-->return"Apple"没错,在这个小例子中,我们可以这样做.2.没有多态的世界现在假设编程世界没有多态,我们就不能使用它。针对上面的例子,引入两个新的类,橙子(Orange)和购物车(ShopCart):注:Apple和Orange没有共同的父类Fruit,Orange类获取价格的方法是getUnitPrice(),而Apple班级不同。购物车可以添加苹果和橙子,有一个计算总价的方法:calculateTotalPrice。在这个方法中,需要判断每个对象的类型,然后调用不同的方法。如果新增一个香蕉类,不仅需要新增一个addBanana()方法,还要仔细修改计算总价的方法:找到对应的地方,添加一个分支来处理香蕉类。是不是很痛?3.请回到多态现在你应该能看到抽象类Fruit的作用了。如果Apple和Orange都实现了Fruit,那么购物车就会变得极其简单:现在想一想:为什么购物车类可以变得简单明了?因为ShopCart面对的是一个抽象的概念:Fruit,而不是Apple、Orange、Banana……的具体实现,它不需要关心那些烦人的细节,只需要为Fruit编程即可。为什么ShopCart可以对Fruit的抽象“接口”进行编程?一定是多态性在背后起作用!所以你在这里!这就是我说“空话”做实事想表达的意思,abstractclass/interface其实说的是“空话”,实际做实事的却是具体的实现类。但要说“空话”,就必须要有一个载体,而这个载体就是抽象概念Fruit!4.思考现在我们应该知道抽象的力量了,一个好的抽象(Fruit)可以让代码极其简洁。这就是书中反复强调的“向接口编程,而不是向实现编程”的意思《设计模式》。但是问题来了:我们如何才能抽象出一个好的概念呢?上面的例子很简单,现实中也有相关的名词,所以很容易想出水果这样的概念。如果是大系统,难度会大很多。在许多情况下,需要抽象的概念在现实中没有对应物。这是对设计者功力的考验,也是面向对象分析设计的难点。经验的积累和大量的练习就可以了。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号编码】点此查看该作者更多好文