有人能告诉我第一个和第二个代码之间的区别是什么吗? MaxPQ代表优先级队列,它是可以相互比较的“密钥”对象的集合。
代码1:
public class MaxPQ<Key extends Comparable<Key>>{
...
}
代码2:
public class MaxPQ<Key implements Comparable<Key>>{
...
}
第二个代码没有编译,但是对于我来说,为什么在使用泛型时我们需要扩展而不是实现接口是不直观的。
有人能告诉我第一个和第二个代码之间的区别是什么吗? MaxPQ代表优先级队列,它是可以相互比较的“密钥”对象的集合。
代码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
对于接口和类,因为在泛型类声明的情况下它没有任何区别是绑定到接口或类的类型参数。
当然意思是 extends
与它在类定义中的典型用法完全不同。 Angelika Langer确实有关于不同含义的好文本 extends
在Java中: “延伸”总是意味着“继承”吗?