java队列接口多态性
我在看书 在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访问某些方法,
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 doQueue l=new LinkedList();l.push(“hello”)
。它不会编译。队列
不能使用push和pop。它们是从堆栈
接口实现的方法(该接口也是LinkedList
实现的)。很抱歉,我是从没有实现QueuePS的地方读到它的:将LinkedList分配到队列接口被称为“加宽转换”。和push+pop在队列接口上可用。get等特定于列表的方法不可用,因此,如果将变量声明为队列实例,则这些方法不可用,即使基础对象可能有这些方法。@Matt try doQueue l=new LinkedList();l.push(“hello”)
。它不会编译。队列
不能使用push和pop。它们是从堆栈
接口实现的方法(该接口也是链接列表
实现的)。