什么是多态性?我不确定我是否理解正确。
在python范围内,我可以从中得到如下定义参数:

def blah (x, y)

不必指定类型,而不是像Java那样的另一种语言,它看起来更像是:
public void blah (int x, string y)

我说得对吗?

最佳答案

请注意,不同的人使用不同的术语;尤其是object oriented community和(其余的)programming language theory community之间经常存在差异。
一般来说,多态性意味着一个方法或函数能够处理不同类型的输入。例如,add类中的+方法(或Integer运算符)可能执行整数加法,而add类中的Float方法执行浮点加法,而add类中的Bignum方法对任意大小的数字执行正确的操作。多态性是在不知道对象是什么类型的数字的情况下调用对象的add方法的能力。
一种特殊的多态性,通常在功能团体中被称为参数多态性,在OOP团体中被称为通用编程,它能够在不考虑对象的精确类型的情况下对对象执行某些操作。例如,要反转一个列表,您不需要关心列表元素的类型,只需要知道它是一个列表。因此,您可以编写通用(从这个意义上说)列表反转代码:它将在整数、字符串、小部件、任意对象等的列表上相同地工作。但是您不能编写以通用方式添加列表元素的代码,因为元素被解释为数字的方式取决于它们是什么类型。
另一种多态性,通常被称为功能团体中的即席多态性或(至少对某些形式的多态性)通用编程,并且通常在OOP团体中对多态性进行子类型化(尽管这在一定程度上限制了概念),它具有单一方法或功能的能力。根据其参数的精确类型(或者,对于方法,其方法被调用的对象的类型),其行为不同。上面的add示例是即席多态性。在动态类型语言中,这种能力不用说;静态类型语言往往(但不必)有一些限制,例如要求参数是某个特定类的子类(Addable)。
多态性不需要在定义函数时指定类型。这与静态类型和动态类型更相关,尽管这不是问题的固有部分。动态类型化的语言不需要类型声明,而静态类型的语言通常需要一些类型声明(从Java中的很多内容到ML中几乎没有)。

08-08 01:05