我有一个我真的无法理解的奇怪问题。
我以这种方式创建了 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(...);
我真的不明白这种行为,有人能给我一些暗示吗?您是否也可以给我一些链接或其他参考以便了解这个问题?
提前致谢
答案 0 :(得分:9)
addLast
在LinkedList
类中声明,但不在List
接口中声明。因此,您只能使用LinkedList
类型的变量来调用它。但是,对于List
类型的变量,您可以改为调用add
,因为它会将元素添加到List
的末尾。
当编译器看到List
变量时,它不知道将分配给该变量的对象的运行时类型。因此,它只能让您调用List
接口的方法。例如,您可以为您的变量分配一个ArrayList
实例,该实例没有addLast
方法,因此它无法调用LinkedList
的{{1}}方法。未在List
(或List
的超级界面)中声明。