Java LinkedList类中没有peek()方法? LinkedList队列=新建LinkedList();//queue.peek() Queue queue2=新建LinkedList();//队列2.peek() List queue3=新建LinkedList();//queue3.peek()错误!

Java LinkedList类中没有peek()方法? LinkedList队列=新建LinkedList();//queue.peek() Queue queue2=新建LinkedList();//队列2.peek() List queue3=新建LinkedList();//queue3.peek()错误!,java,list,linked-list,declaration,Java,List,Linked List,Declaration,我用三种不同的方式声明了linklist类。我知道linkedlist类是队列和列表接口的实现,但是当我以第三种方式声明并希望在eclipse中使用peek()方法时,为什么会出现错误?它们都是同一类?您正在将链接列表声明为列表对象。 列表接口不提供peek()方法。 这就是为什么你不能使用它。 请参见此处 没有peek方法。当您使用LinkedList创建列表时,java会在内部将其转换为列表,因此您的peek方法将丢失 您创建的三个对象与它们被强制转换为不同类型的对象不同。是的,Linked

我用三种不同的方式声明了linklist类。我知道linkedlist类是队列和列表接口的实现,但是当我以第三种方式声明并希望在eclipse中使用peek()方法时,为什么会出现错误?它们都是同一类?

您正在将
链接列表
声明为列表对象。 列表接口不提供
peek()
方法。 这就是为什么你不能使用它。 请参见此处

没有peek方法。当您使用
LinkedList
创建列表时,java会在内部将其转换为
列表
,因此您的peek方法将丢失


您创建的三个对象与它们被强制转换为不同类型的对象不同。

是的,LinkedList类中有一个peek方法

在LinkedList类中可用。由于您使用的是列表类型的引用,并且列表接口没有方法
peek()
,所以编译器不允许您调用此方法

在前两个示例中,您使用了和类型的引用,因此可以调用
peek()
方法


请参见

您不能从抽象接口的实例调用具体类的方法

链接列表
类和
列表
接口之间的关系就像
类和
动物
接口之间的关系:

Animal
的实例可以调用
.breathe()
.reproduction()
等方法,并在方法本身保持不变的情况下以不同的方式响应对这些方法的调用(这就是接口的用途),但接口不应具有
.griplews()
方法,因为不是所有的动物都有爪子

此时,如果要调用
.griplews()
方法,需要首先询问“但是,这是哪种动物?”


因此,就像您对
Cat
.锐化爪()
方法(伪代码)所做的那样

…要使用
LinkedList
.peek()
方法,需要将其转换回更具体的类:

if (animal is Cat) {
  //remove ambiguity by defining that the (animal) is a (Cat)
  Cat thisCat = (Cat)animal;
  //make the cat sharpen it's claws
  thisCat.sharpenClaws();
}

您正试图调用
List
类型的变量
peek
。编译器不在乎它是否引用了
LinkedList
。那么,用不同的类声明相同的引用(接口)有什么区别呢?它们都有相同的方法?请参阅我添加的链接。我希望这有助于理解为什么我们使用界面作为参考。以清晰、简洁的方式解释问题,并提供相关信息的链接+1.我添加了一个答案,用一个类比来解释这个问题,并为任何感兴趣的人提供了一个在维护接口实现时使用该方法的示例。该方法不会丢失。您只能从接口实例直接调用它。此外,“当您使用LinkedList创建列表时,java在内部将其转换为列表,因此您的peek方法丢失。”这是一种非常误导您的措辞方式。Java不是“内部铸造”任何东西。代码正在使用
列表varName=/…
显式执行“强制转换”。请解释下一票..我没有下一票,但我猜这是因为你的答案没有添加其他人没有的内容,只是在问题上添加一个指向Javadoc for List的链接可能对提问者没有帮助。我也不知道为什么要投反对票。可能是因为它只是解释了“什么”,而没有真正解释“为什么”,即使是这样,这是一个粗略的解释。
if (animal is Cat) {
  //remove ambiguity by defining that the (animal) is a (Cat)
  Cat thisCat = (Cat)animal;
  //make the cat sharpen it's claws
  thisCat.sharpenClaws();
}
if (aList instanceof LinkedList) {
  ((LinkedList)aList).peek();
}