Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java队列接口多态性_Java_Interface_Queue_Polymorphism - Fatal编程技术网

java队列接口多态性

java队列接口多态性,java,interface,queue,polymorphism,Java,Interface,Queue,Polymorphism,我在看书 在Java中声明队列时 Queue<Integer> queue = new LinkedList<Integer>(); Queue Queue=newlinkedlist(); 幕后发生了什么?因为我看到队列是一个只包含方法签名的接口,而LinkedList并没有直接实现它,所以它如何覆盖这些方法(add(),peek(),poll(),offer(),和remove())以及这样的多态性呢?我的意思是,您只能从LinkedList访问某些方法,

我在看书

在Java中声明队列时

    Queue<Integer> queue = new LinkedList<Integer>();
Queue Queue=newlinkedlist();
幕后发生了什么?因为我看到队列是一个只包含方法签名的接口,而LinkedList并没有直接实现它,所以它如何覆盖这些方法(
add()
peek()
poll()
offer()
,和
remove()
)以及这样的多态性呢?我的意思是,您只能从
LinkedList
访问某些方法,但不能访问所有方法,例如
public void add(int-index,E-element)
不再可用,因为它使队列具有明显的类型。我们不是也需要投吗?

。当使用接口声明对象时,编译器仅将其视为该类型的对象。但是,由于无法实例化接口,因此需要将其实例化为实现该接口的类。在这种情况下,您将无法访问
LinkedList
的一些方法(
push()
pop()
,例如),因为编译器将
queue
标识为
queue
。但是,由于它被实例化为
链接列表
,并且可以轻松地强制转换为
链接列表
。当使用接口声明对象时,编译器仅将其视为该类型的对象。但是,由于无法实例化接口,因此需要将其实例化为实现该接口的类。在这种情况下,您将无法访问
LinkedList
的一些方法(
push()
pop()
,例如),因为编译器将
queue
标识为
queue
。但是,由于它被实例化为
链接列表
,并且可以轻松地强制转换为
链接列表

因为我看到队列是一个只有方法签名的接口,而LinkedList并没有直接实现它

LinkedList确实实现了一个队列:

因为我看到队列是一个只有方法签名的接口,而LinkedList并没有直接实现它

LinkedList确实实现了一个队列:

请参阅此

请参阅此


来自JDK的源代码:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
因此,
LinkedList
并没有直接实现
Queue
,而是实现了
Deque
,它扩展了
Queue

公共接口Deque扩展队列{
因此,
LinkedList
继承了
Queue
的抽象方法


重写方法通常直接在LinkedList中定义。

来自JDK的源代码:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
因此,
LinkedList
并没有直接实现
Queue
,而是实现了
Deque
,它扩展了
Queue

公共接口Deque扩展队列{
因此,
LinkedList
继承了
Queue
的抽象方法


重写方法直接在
LinkedList
中定义,与往常一样。

很抱歉,我是从其中读取的,它没有实现QueueAh!LinkedList正在实现已经扩展队列的Deque。很抱歉,我是从中读取的,它没有实现QueueAh!LinkedList正在实现已经扩展队列的Deque。很抱歉我是从那里读的,它没有实现QueuePS:将LinkedList分配给队列接口被称为“扩展转换”.和push+pop在队列接口上可用。get等列表特定方法不可用,因此,如果将变量声明为队列实例,则这些方法不可用,即使基础对象可能有这些方法。@Matt try do
Queue l=new LinkedList();l.push(“hello”)
。它不会编译。
队列
不能使用push和pop。它们是从
堆栈
接口实现的方法(该接口也是
LinkedList
实现的)。很抱歉,我是从没有实现QueuePS的地方读到它的:将LinkedList分配到队列接口被称为“加宽转换”。和push+pop在队列接口上可用。get等特定于列表的方法不可用,因此,如果将变量声明为队列实例,则这些方法不可用,即使基础对象可能有这些方法。@Matt try do
Queue l=new LinkedList();l.push(“hello”)
。它不会编译。
队列
不能使用push和pop。它们是从
堆栈
接口实现的方法(该接口也是
链接列表
实现的)。