泛型编程是多态的一个例子吗?

时间:2010-03-27 20:51:09

标签: java generics polymorphism

我正在做一个家庭作业(一个项目),其中一个标准是我必须以明显改善代码整体质量或功能的方式利用多态性。

我做了一个看起来像这样的哈希表:

public class HashTable<E extends Hashable>{
    ...
}

其中Hashable是我制作的具有hash()函数的接口。

我知道以这种方式使用泛型可以提高代码的质量,因为现在HashTable可以使用我想要的任何类型(例如,而不仅仅是int或Strings)。但我不确定它是否证明了多态性。

我认为确实如此,因为E可以是任何实现Hashable的类型。换句话说,HashTable是一个可以(几乎)使用任何类型的类。

但我不太确定 - 那个多态?或许我可以得到一些关于多态性究竟是什么的澄清?

提前致谢!


编辑:收到以下答案后(请参阅:first answer received),我阅读了维基百科文章,并发现了这一点:

“在面向对象的编程社区中,使用参数多态的编程通常称为泛型编程。” (重点补充)

4 个答案:

答案 0 :(得分:6)

是的,它被称为parametric polymorphism。你将它归类为多态的原因是现场点击。

答案 1 :(得分:6)

简而言之,多态性采用许多不同的类,这些类共享一个共同的基类(或接口),并将它们全部视为该共同基础的成员,而不知道或关心它们是哪个特定的继承类或它们是多么精确实现常用功能。在面向对象的编程中,多态性为您提供了问题域的那部分的相对高级别的视图 - 您说,“此代码并不关心这些对象的具体细节 - 只是它们实现了一些常见的函数X ,Y,Z,“或”只是他们都是基本类BaseClass.

您的示例使用多态,因为您定义了一个Hashable基类 - 并提供了一个仅关注它接收的对象的那个方面的函数。 Hashable个对象可能有多种形式,但您的代码将它们全部视为单个基本类型。

答案 2 :(得分:3)

除了参数多态之外,你可能会调用存储在哈希表中的对象的hashCode方法,这是John引用的多态的一个例子。 HashTable依赖于参数多态,而E依赖于(普通)多态。

答案 3 :(得分:0)

虽然Rob的答案在某些技术意义上可能是正确的,但我认为这不是所要求的。我认为wikipedia article更有可能成为您所需要的。