1

私はhttp://www.docjar.com/html/api/java/util/LinkedList.java.htmlを読んでいました

Javaでキューを宣言するとき

    Queue<Integer> queue = new LinkedList<Integer>();

舞台裏で何が起こりますか?add()キューはメソッドシグネチャだけのインターフェイスであり、LinkedListはそれを直接実装していないので、これらのメソッド(、、、、、、)をどのようにオーバーライドして、そのようpeek()なポリモーフィズムを実行するのでしょうか。つまり、特定のメソッドにしかアクセスできませんが、たとえば、キュ​​ーに見かけのタイプが表示されるため、すべてのメソッドが使用できなくなったわけではありません。また、キャストする必要はありませんでしたか?poll()offer()remove()LinkedListpublic void add(int index, E element)

4

4 に答える 4

5

JDKのソースコードから:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{

したがって、LinkedList<E>を直接実装するのではなく、 を拡張する をQueue<E>実装します。Deque<E>Queue<E>

public interface Deque<E> extends Queue<E> {

したがって、LinkedList<E>の抽象メソッドを継承しQueue<E>ます。

オーバーライド メソッドはLinkedList<E>、通常どおり - で直接定義されます。

于 2012-08-20T17:26:48.313 に答える
2

キューはメソッド シグネチャのみのインターフェイスであり、LinkedList はそれを直接実装していないためです。

LinkedList はキューを実装します: http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html

于 2012-08-20T17:18:45.050 に答える
0

LinkedList実装しQueueます。インターフェイスを使用してオブジェクトを宣言すると、コンパイラはそれをその型のオブジェクトとしてのみ扱います。ただし、インターフェイスはインスタンス化できないため、そのインターフェイスを実装するクラスとしてインスタンス化する必要があります。この場合、LinkedListコンパイラが. ただし、 としてインスタンス化されているため、 に簡単にキャストできます。push()pop()queueQueue<Integer>LinkedList<Integer>LinkedList

于 2012-08-20T17:18:15.587 に答える
0

これを参照

http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html

于 2012-08-20T17:19:16.333 に答える