【发布时间】:2016-04-10 12:58:43
【问题描述】:
类内、嵌套类和类外使用接口有什么区别。
当我在 Oracle 阅读 Questions and Exercises: Nested Classes 中的 DataStructure.java 课程时(在此处粘贴示例片段):
public class DataStructure {
//some code
interface DataStructureIterator extends java.util.Iterator<Integer> { }
// Inner class implements the DataStructureIterator interface,
// which extends the Iterator<Integer> interface
private class EvenIterator implements DataStructureIterator {
//rest code
所以代码显示界面中没有任何主体。我不能只用
java.util.Iterator<Integer>扩展 EvenIterator 类而不是创建这个接口并实现它吗?在类外部/内部声明干扰之间是否还有其他区别(除了代码可读性)?
当外部类被接口扩展时会发生什么。它会对嵌套类产生任何影响吗?
只是想确定这些东西以了解如何正确使用它们,感谢您的宝贵时间。
【问题讨论】:
-
没有区别,
interface总是隐含的static,即使没有这样声明。在这种情况下,接口被用作穷人的类型别名。 -
通常你只为对父类有一些功能依赖的东西创建内部类。比如你有一个可点击的
View,那么你就有一个名为View.OnClickListener的内部类监听器,否则首选外部类 -
@cricket_007,事实上,即使在这种情况下,最好使用单独的接口,因为有一天有人可能希望创建一个替代的
View实现。或者也许在其他可点击对象中重用这个接口。请注意,Java 很少(如果有的话)在标准库中使用嵌套接口。 -
@SergeyTachenov
java.util.Map.Entry是我提到的情况的示例嵌套接口 -
@cricket_007,是的,这是一个很好的例子。我更多地考虑各种听众(例如,
ActionListener不是Action的一部分)。不过,拥有一个单独的MapEntry接口一点也不会有什么坏处。