为什么我的LinkedList不包含addLast()方法?

Ema*_*jar 4 java oop collections

我有一个奇怪的问题我真的无法理解.

我用这种方式创建了一个LinkedList:

List<String> customList = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)

如果检查customList使用list instanceof LinkedListi get 的类型true,那么customList是LinkedList.

现在,如果我尝试在customList上执行addLast()方法,我会收到Eclipse错误:

 The method addLast(String) is undefined for the type List<String>
Run Code Online (Sandbox Code Playgroud)

addList方法在LinkedList类中定义,但使用此方法的唯一方法是将customList声明为LinkedList而不是List,这样:

LinkedList<String> customList= new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)

或者我必须使用演员:

((LinkedList<String>) list).addLast(...);
Run Code Online (Sandbox Code Playgroud)

我真的不明白这种行为,有人能给我一些提示吗?你能否给我一些链接或其他参考,以了解这个问题?

提前致谢

Era*_*ran 9

addLastLinkedList类中声明,但不在List界面中声明.因此,您只能使用LinkedList类型的变量来调用它.但是,对于List类型的变量,您可以调用add,因为它将元素添加到结尾List.

当编译器看到List变量时,它不知道将分配给该变量的对象的运行时类型.因此它只能让你调用List接口的方法.例如,您可以为您的变量分配一个ArrayList没有addLast方法的实例,因此它不能让您调用LinkedList未在其中声明的方法List(或超级接口List).