谁能告诉我第一个和第二个代码之间的区别是什么?MaxPQ 代表优先级队列,它是可以相互比较的“Key”对象的集合。
代码 1:
public class MaxPQ<Key extends Comparable<Key>>{
...
}
代码 2:
public class MaxPQ<Key implements Comparable<Key>>{
...
}
第二个代码无法编译,但我不直观为什么在使用泛型时我们需要扩展而不是实现接口。
谁能告诉我第一个和第二个代码之间的区别是什么?MaxPQ 代表优先级队列,它是可以相互比较的“Key”对象的集合。
代码 1:
public class MaxPQ<Key extends Comparable<Key>>{
...
}
代码 2:
public class MaxPQ<Key implements Comparable<Key>>{
...
}
第二个代码无法编译,但我不直观为什么在使用泛型时我们需要扩展而不是实现接口。
区别很简单:第二个代码片段不会编译,也永远不会。extends
对于类和接口,您总是使用泛型。也super
可以在那里使用关键字,但它具有不同的语义。
泛型中没有实现。第二个代码无效。您可能会混淆:
public class MaxPQ implements Comparable<Key> {
...
}
我假设它被决定extends
用于接口和类,因为在泛型类声明的情况下,类型参数绑定到接口或类没有任何区别。
当然,of 的含义extends
与其在类定义中的典型用法有很大不同。Angelika Langer 确实有很好的关于extends
Java 中不同含义的文本:“扩展”是否总是意味着“继承”?