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

在Java中的泛型中实现vs扩展,java,generics,interface,extend,implements,Java,Generics,Interface,Extend,Implements,有人能告诉我第一个和第二个代码之间的区别吗? MaxPQ代表优先级队列,它是可以相互比较的“键”对象的集合 代码1: public class MaxPQ<Key extends Comparable<Key>>{ ... } 公共类MaxPQ{ ... } 代码2: public class MaxPQ<Key implements Comparable<Key>>{ ... } 公共类MaxPQ{ ... } 第二段代码不会编译,但我不

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

代码1:

public class MaxPQ<Key extends Comparable<Key>>{
...
}
公共类MaxPQ{
...
}
代码2:

public class MaxPQ<Key implements Comparable<Key>>{
...
}
公共类MaxPQ{
...
}

第二段代码不会编译,但我不明白为什么在使用泛型时需要扩展而不是实现接口。

区别非常简单:第二段代码片段不会编译,也永远不会编译。对于泛型,您总是对类和接口使用
扩展
。也可以在那里使用
super
关键字,但它有不同的语义。

泛型中没有实现。第二个代码无效。您可能会混淆:

public class MaxPQ implements Comparable<Key> {
   ...
}
公共类MaxPQ实现可比较{
...
}

我假设决定对接口和类使用
扩展
,因为在泛型类声明的情况下,类型参数绑定到接口或类并没有任何区别


当然,
扩展的含义与它在类定义中的典型用法有很大不同。Angelika Langer确实有很好的文本介绍了Java中
扩展的不同含义:

@MarkX:不,泛型就是这样设计和指定的。简单性?@Mark一个原因是:
可能是一个接口本身,突然间它会再次扩展
,即使Comparable是一个接口。因此,由于你不能在所有情况下都完全正确,所以最好是前后一致。类似的问题可以在[here][1]中找到。[1]: