# 问题和练习：嵌套类

> 原文： [https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/nested-questions.html](https://docs.oracle.com/javase/tutorial/java/javaOO/QandE/nested-questions.html)

## 问题

1.  程序 [`Problem.java`](Problem.java) 无法编译。你需要做什么才能编译？为什么？

2.  使用 [`Box`](https://docs.oracle.com/javase/8/docs/api/javax/swing/Box.html) 类（在`javax.swing`包中）的 Java API 文档来帮助您回答以下问题。

    1.  什么静态嵌套类`Box`定义了什么？

    2.  `Box`定义了什么内部类？

    3.  什么是`Box`的内部阶级的超类？

    4.  你可以在任何类中使用哪些`Box`的嵌套类？

    5.  你如何创建`Box`的`Filler`类的实例？

## 演习

1.  获取文件 [`Class1.java`](Class1.java) 。编译并运行`Class1`。什么是输出？

2.  以下练习涉及修改 [`DataStructure.java`](../examples/DataStructure.java) 类，[内部类示例](../../../java/javaOO/innerclasses.html)讨论。

    1.  定义名为`print(DataStructureIterator iterator)`的方法。使用类`EvenIterator`的实例调用此方法，以便它执行与方法`printEven`相同的功能。

    2.  调用方法`print(DataStructureIterator iterator)`，以便打印具有奇数索引值的元素。使用匿名类作为方法的参数，而不是接口`DataStructureIterator`的实例。

    3.  定义名为`print(java.util.Function&lt;Integer, Boolean&gt; iterator)`的方法，该方法执行与`print(DataStructureIterator iterator)`相同的功能。使用 lambda 表达式调用此方法以打印具有偶数索引值的元素。使用 lambda 表达式再次调用此方法以打印具有奇数索引值的元素。

    4.  定义两个方法，以便以下两个语句打印具有偶数索引值的元素和具有奇数索引值的元素：

        ```
        DataStructure ds = new DataStructure()
        // ...
        ds.print(DataStructure::isEvenIndex);
        ds.print(DataStructure::isOddIndex);
        ```

[检查你的答案。](nested-answers.html)