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

时间:2015-07-23 06:49:01

标签: java oop collections

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

我以这种方式创建了 LinkedList

List<String> customList = new LinkedList<String>();

如果使用customList检查list instanceof LinkedList的类型我得到true,那么customList就是一个LinkedList。

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

 The method addLast(String) is undefined for the type List<String>

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

LinkedList<String> customList= new LinkedList<String>();

或者我必须使用演员:

((LinkedList<String>) list).addLast(...);

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

提前致谢

1 个答案:

答案 0 :(得分:9)

addLastLinkedList类中声明,但不在List接口中声明。因此,您只能使用LinkedList类型的变量来调用它。但是,对于List类型的变量,您可以改为调用add,因为它会将元素添加到List的末尾。

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