实现vs在Java中的generics中扩展

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

代码1:

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

代码2:

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

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

差异非常简单:第二个代码片段无法编译,永远不会。 对于generics,您总是使用extends ,用于类和接口。 也可以在那里使用super关键字,但它具有不同的语义。

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

 public class MaxPQ implements Comparable { ... } 

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

当然, extends含义与类定义中的典型用法完全不同。 Angelika Langer在Java中有关于extends不同含义的好文本: “扩展”总是意味着“inheritance”吗?