implementiert vs in Generics in Java erweitert

Kann mir jemand sagen, was die Unterschiede zwischen den ersten und zweiten Codes sind? MaxPQ steht für Priority Queue, eine Sammlung von “Key” -Objekten, die miteinander verglichen werden können.

Code 1:

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

Code 2:

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

Der zweite Code kompiliert nicht, aber es ist für mich nicht intuitiv, warum wir Schnittstellen erweitern und implementieren müssen, wenn ein Generic verwendet wird.

Der Unterschied ist ziemlich einfach: Das zweite Code-Snippet kompiliert nicht und wird es nie tun. Bei Generika verwenden Sie immer extends für classn und Schnittstellen. Auch super Schlüsselwort kann dort verwendet werden, aber es hat unterschiedliche Semantik.

Es gibt keine Hilfsmittel in Generika. Der zweite Code ist ungültig. Sie verwirren wahrscheinlich mit:

 public class MaxPQ implements Comparable { ... } 

Ich nehme an, es wurde entschieden, extends sowohl für Schnittstellen als auch für classn zu verwenden, da es im Fall einer generischen classndeklaration keinen Unterschied macht, ob das Typargument an die Schnittstelle oder an die class gebunden ist.

Natürlich ist die Bedeutung von extends ziemlich verschieden von seiner typischen Verwendung in der classndefinition. Angelika Langer haben schöne Texte über verschiedene Bedeutungen von extends in Java: Bedeutet “extends” immer “inheritance”?