arrays - 当我将类的实例分配给接口变量时,这意味着什么?
问题描述
我想知道是否:
List<String> s = new ArrayList<String>()
是一个使用列表方法的列表,但它是用 ArrayList 构建的?
它的行为是什么?
我无法完全理解我是用这段代码创建队列还是 LinkedList,
Queue q = new LinkedList();
解决方案
ArrayList 实现 List 接口。类似地,LinkedList 实现了 Queue 接口。这意味着:
- ArrayList 承诺它将拥有表现得像 List 所需的所有方法
- LinkedList 承诺它将拥有表现得像队列所需的所有方法
因为这两个类都实现了这些承诺(它们实现了接口),Java 可以将 ArrayList 视为 List。同样,它可以将 LinkedList 视为 Queue。
你为什么想做这个?您可能希望能够将任何 List 传递到您的代码中——您并不关心它是如何实现的。因此,您可能有一个 HugeSparseList,它还实现了完全不同地存储底层对象的 List。这对您的代码无关紧要 - 只要 API 相同,您的代码仍然可以工作。
推荐阅读
- flutter - 如何找到为 Flutter Web 应用程序提供服务的 URL?
- html - 如何导入一个 html 文件并将其用作另一个 html 文件中的预设?
- flutter - Flutter 无法从另一个类调用异步函数
- php - DDEV - php 在 Windows 上的容器内有错误的日期/时间
- flask - 部署时的 Flask 更新路径
- cube.js - Cube.js 时间范围最佳实践
- html - Google 搜索结果的自定义描述
- jupyter-lab - 显示 ipywidget 输出小部件的最后输出
- excel - ListBox 有多个相同的值
- linux - samples/bpf/xdpsock_user.c:xsk_configure_socket:331: errno: 1/“不允许操作”