首页 > 解决方案 > 当我将类的实例分配给接口变量时,这意味着什么?

问题描述

我想知道是否:

List<String> s = new ArrayList<String>()

是一个使用列表方法的列表,但它是用 ArrayList 构建的?

它的行为是什么?

我无法完全理解我是用这段代码创建队列还是 LinkedList,

Queue q = new LinkedList();

标签: arrayslistarraylist

解决方案


ArrayList 实现 List 接口。类似地,LinkedList 实现了 Queue 接口。这意味着:

  • ArrayList 承诺它将拥有表现得像 List 所需的所有方法
  • LinkedList 承诺它将拥有表现得像队列所需的所有方法

因为这两个类都实现了这些承诺(它们实现了接口),Java 可以将 ArrayList 视为 List。同样,它可以将 LinkedList 视为 Queue。

你为什么想做这个?您可能希望能够将任何 List 传递到您的代码中——您并不关心它是如何实现的。因此,您可能有一个 HugeSparseList,它还实现了完全不同地存储底层对象的 List。这对您的代码无关紧要 - 只要 API 相同,您的代码仍然可以工作。


推荐阅读