java - 为什么在创建对象的引用时可以使用接口(interface)作为类型?

标签 java

我正在关注 Oracle 的 Java 在线教程,并对某行特定代码感到困惑。

我正在查看的示例的完整代码在这里:http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

令我困扰的特定行位于 DataStructure 类的 printEven() 方法中:

DataStructureIterator iterator = this.new EvenIterator();

我不明白为什么接口(interface) DataStructureIterator 被用作迭代器的类型,而我尝试过的实际类型 EvenIterator 工作得同样好并且对我来说更有意义:

EvenIterator iterator = this.new EvenIterator();

最佳答案

只有当您的代码必须有一个EvenIterator时,它才有意义。

否则应首选更通用的接口(interface),允许您更改底层实现而无需进一步更改代码。

作为一个(有点人为的)具体示例,使用 ArrayList 来强制执行恒定时间索引访问可能是有意义的;在这种情况下,您可能希望避免使用更通用的 List 以确保不会破坏应用程序的计时。

关于java - 为什么在创建对象的引用时可以使用接口(interface)作为类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742024/

相关文章:

java - ArrayList 循环打印 null

java - 如何禁用相同布局的按钮之间的交互?

Java,Hibernate getList 不工作

java - 在 Spring AOP 中指定切入点

java - 如何使用 JCalendar 选择数组中的元素?

java - JSON 到 Java 中的对象?

java - 安卓开发 : How do I integrate threads in this?

java - 如何在生产者和消费者之间共享单个套接字?

java - 为什么 MockMvc 总是返回空的 content()?

java - 哪些 BPM 工具适合 Spring?