Java 列表之间的差异<;字符串>;strings=新链接列表<&燃气轮机;(); 和LinkedList<;字符串>;strings=新链接列表<&燃气轮机;();

Java 列表之间的差异<;字符串>;strings=新链接列表<&燃气轮机;(); 和LinkedList<;字符串>;strings=新链接列表<&燃气轮机;();,java,Java,我正在学习Java中的接口,他们给出的一个例子是能够使用列表接口list strings=new LinkedList()创建一个链表但它们不涉及任何细节。为什么我要这样做,而不是LinkedList strings=newlinkedlist()?列表是一个接口,这意味着在扩展列表时必须实现一定数量的方法链接列表恰好扩展了列表。当您执行List strings=new LinkedList()时,java只看到列表的方法。但是,如果执行LinkedList strings=new Linked

我正在学习Java中的接口,他们给出的一个例子是能够使用列表接口
list strings=new LinkedList()创建一个链表但它们不涉及任何细节。为什么我要这样做,而不是
LinkedList strings=newlinkedlist()

列表
是一个接口,这意味着在扩展
列表
时必须实现一定数量的方法<代码>链接列表
恰好扩展了
列表
。当您执行
List strings=new LinkedList()时,java只看到
列表的方法。但是,如果执行
LinkedList strings=new LinkedList()
java将其视为一个
LinkedList
,当您调用方法
LinkedList
时,它就会工作,就像
getLast
一样。人们做
List strings=newlinkedlist()主要是为了可读性,但应该大致相同。

对于局部变量,这并不重要,至少在这种情况下不重要

List strings=newlinkedlist()的主要优点
就是说,如果需要,您可以简单地将LinkedList交换为ArrayList或任何其他列表实现

这在类的“边缘”(参数、返回类型、字段)最为重要,因为它使API更加灵活,原因有二:

  • 其他类不受您选择的列表实现的约束,因为您的类将接受任何列表
  • 与您的类接口的其他类强制不知道您的类内部选择使用哪个列表实现,这意味着您可以随时从ArrayList切换到LinkedList,或者从LinkedList切换到LinkedList,而不会中断类外的代码

    • 摘自《有效Java》,第三版,第64项: 通过对象的接口引用对象

      如果您养成了使用接口作为类型的习惯,那么您的程序 将更加灵活。如果您决定要切换 实现时,您所要做的就是更改 构造函数(或使用不同的静态工厂)

      因此,使用
      List strings=newlinkedlist(),您只需更改实现名称,其余的客户端代码保持不变

      使用
      LinkedList字符串=新建LinkedList(),您可能必须修改客户端代码


      请注意,将实现类作为类型进行是完全合适的。但是,如果您可以使用接口作为类型,它是最佳选择。

      列表
      是接口,而
      链接列表
      不是。请在java中查找多态性。看见