1

我正在阅读http://www.docjar.com/html/api/java/util/LinkedList.java.html

在 Java 中声明队列时

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

幕后发生了什么?因为我看到 queue 是一个只有方法签名的接口,而 LinkedList 并没有直接实现它,所以它如何覆盖这些方法(add()peek()poll()offer()remove())并像那样做多态性?我的意思是你只能访问某些特定的方法,但并不是所有的方法都LinkedList不再public 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>. 但是,由于它被实例化为 a LinkedList<Integer>,并且可以很容易地转换为 a 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 回答