实现vs在Java中的泛型中扩展

时间:2012-06-10 19:57:42

标签: java generics interface extend implements

有人能告诉我第一个和第二个代码之间的区别是什么吗? MaxPQ代表优先级队列,它是可以相互比较的“密钥”对象的集合。

代码1:

public class MaxPQ<Key extends Comparable<Key>>{
...
}

代码2:

public class MaxPQ<Key implements Comparable<Key>>{
...
}

第二个代码没有编译,但是对于我来说,为什么在使用泛型时我们需要扩展而不是实现接口是不直观的。

3 个答案:

答案 0 :(得分:11)

区别非常简单:第二个代码片段无法编译,永远不会。对于泛型,您始终对类和接口使用extends。此处也可以使用super关键字,但它具有不同的语义。

答案 1 :(得分:1)

泛型中没有工具。第二个代码无效。你可能会混淆:

public class MaxPQ implements Comparable<Key> {
   ...
}

答案 2 :(得分:0)

我认为决定对接口和类使用extends,因为在泛型类声明的情况下,它与接口或类绑定的类型参数没有任何区别。

当然extends的含义与类定义中的典型用法完全不同。 Angelika Langer确实有关于Java中extends的不同含义的好文:Does "extends" always mean "inheritance"?