什么是多态性?在Python语言中,我能想到的是可以这样定义参数:
def sum(x, y)
它不用指定参数类型,如果换了其他语言,比如JAVA,可能是这样的:
public void sum(int x, int y)
难道这就是所谓的多态性吗?
不!不需要指定类型是动态类型语言的特点。
通常来说,多态性指的是一个函数或方法,能够处理不同类型的输入。
例如,对于add函数(或者是'+'操作符),在整数类中,执行的是整数的加法。在浮点型类中,执行的是浮点型数的加法。在不知道相加对象类型的情况下,多态性让add函数能够正常运行。
再比如,在Python中,对一个列表中的元素进行排序,使用list.sort()函数,这时,sort()也不需要知道列表中元素是整型、浮点型或字符串等。当然,需要注意的是,多态性虽然不关心输入的类型,但并非意味着对任意类型的输入都能够正常运行,因为complex numbers, dict, 和range就无法进行排序,也就是说如果列表中含有复数,即使没有虚数部分,也会报错。
举一个生活中的例子,证明多态性:
定义一个speak()函数,在现实中就相当于喇叭。输入对象可以是人及各种动物。当喇叭(speak()函数)面对小猫的时,发出的是‘‘喵’’,面对小狗的时,发出的是‘‘woof’’……
多态性有什么好处呢?
其实很容易猜到,如果没有多态性,那么speak()函数会有多么臃肿,有多少种不同对象类型的输入,就有多少个speak()函数,而操作确实相同的。
多态性在不同语言都有什么样的表现呢?
在JAVA中,是对接口interface的实现。
在Python中,由于它本身就是动态类型语言,对输入参数类型没有明确,因此也实现了多态性。