15

誰かが最初のコードと2番目のコードの違いを教えてもらえますか?MaxPQは優先キューの略で、相互に比較できる「キー」オブジェクトのコレクションです。

コード1:

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

コード2:

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

2番目のコードはコンパイルされませんが、ジェネリックを使用するときにインターフェイスを実装する代わりに拡張する必要がある理由は直感的ではありません。

4

3 に答える 3

13

違いは非常に単純です。2番目のコードスニペットはコンパイルされず、コンパイルされません。ジェネリックスextendsでは、クラスとインターフェイスの両方に常にを使用します。キーワードもsuperそこで使用できますが、セマンティクスが異なります。

于 2012-06-10T20:01:16.753 に答える
1

ジェネリックには実装はありません。2番目のコードは無効です。あなたはおそらくと混同します:

public class MaxPQ implements Comparable<Key> {
   ...
}
于 2012-06-10T20:12:03.497 に答える
0

extendsジェネリッククラス宣言の場合、インターフェイスまたはクラスにバインドされた型引数は何の違いもないため、インターフェイスとクラスの両方に使用することが決定されたと思います。

もちろん、の意味はextends、クラス定義での一般的な使用法とはかなり異なります。extendsアンジェリカ・ランガーには、Javaでのさまざまな意味についての素晴らしいテキストがあります。「拡張」は常に「継承」を意味しますか?

于 2012-06-10T20:26:19.140 に答える