有人能告诉我第一个和第二个代码的区别吗?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
关键字可以在其中使用,但它具有不同的语义。
Key
本身可能是一个接口,即使 Comparable
是一个接口,但 Key
可能会再次 extends
。所以,由于你无法在所有情况下完全正确地做到这一点,只需保持一贯的不一致就可以了。 - Voo泛型中没有实现。第二段代码是无效的。你可能和“:”混淆了。
public class MaxPQ implements Comparable<Key> {
...
}
extends
,是因为在泛型类声明的情况下,类型参数绑定到接口或类没有任何区别。extends
的含义与其典型用法非常不同。Angelika Langer 在 Java 中有一个关于 extends
不同含义的好文:Does "extends" always mean "inheritance"?。