嵌套类:问题与练习
问题
问题: 程序
Problem.java不能编译,你需要怎么做才能让它成功编译?为什么?使用
Box类(在javax.swing包中)的Java API文档 帮助你问答如下问题 .问题:
Box定义了什么静态嵌套类?问题:
Box定义了什么内部类?问题:
Box的内部类的父类是什么?问题:
Box的哪一个嵌套类你可以在任何一个类中使用?问题: 如何创建一个
Box的`Filler嵌套类的实例?
练习
练习: 获取文件
Class1.java. 编译并运行Class1. 输出是什么?练习: 下面的联系涉及到修改
DataStructure.java类, 该类在 Inner Class Example 中有讨论.- 定义一个名为
print(DataStructureIterator iterator)的方法.用一个类EvenIterator类的实例调用这个方法实现printEven方法的功能。
- 定义一个名为
- 调用方法
print(DataStructureIterator iterator)来打印奇数索引的元素.使用一个匿名类作为方法的参数,代替接口DataStructureIterator的实例.
- 定义一个方法
print(java.util.Function<Integer, Boolean> iterator)实现print(DataStructureIterator iterator)相同的功能.通过一个lambda表达式参数调用该方法实现打印出偶数下标的元素,重新用lambda表达式参数调用并实现打印出奇数下标的元素。
定义两个方法可以是如下语句分别打印偶数下标对应的值和技术下标对应的值:
1234DataStructure ds = new DataStructure()// ...ds.print(DataStructure::isEvenIndex);ds.print(DataStructure::isOddIndex);
嵌套类:问题与练习答案
问题答案
问题: 程序
Problem.java不能编译,你需要怎么做才能让它成功编译?为什么?答案: 删除
Inner类的static关键字修饰。静态嵌套类不能访问外部类的实例成员参考ProblemSolved.java.使用
Box类(在javax.swing包中)的Java API文档 帮助你问答如下问题 .问题:
Box定义了什么静态嵌套类?答案:
Box.Filler问题:
Box定义了什么内部类?答案:
Box.AccessibleBox问题:
Box的内部类的父类是什么?答案:
[java.awt.]Container.AccessibleAWTContainer问题:
Box的哪一个嵌套类你可以在任何一个类中使用?答案:
Box.Filler问题: 如何创建一个
Box的`Filler嵌套类的实例?答案:
new Box.Filler(minDimension, prefDimension, maxDimension)
练习答案
练习: 获取文件
Class1.java. 编译并运行Class1. 输出是什么?答案:
InnerClass1: getString invoked.InnerClass1: getAnotherString invoked.练习: 下面的联系涉及到修改
DataStructure.java类, 该类在 Inner Class Example 中有讨论.定义一个名为
print(DataStructureIterator iterator)的方法.用一个类EvenIterator类的实例调用这个方法实现printEven方法的功能。提示: 一下语句在
main方法中奖不能通过编译:12DataStructure ds = new DataStructure();ds.print(new EvenIterator());编译器产生错误信息 “non-static variable this cannot be referenced from a static context—非京台的变量不能再静态上下文中引用”,表达式
new EvenIterator()会产生这个错误. 类EvenIterator是一个内部类,非静态.意味着你必须在外部类的一个实例中创建它的实例,DataStructure数据结构.你尅定义一个方法
DataStructure来创建和返回EvenIterator的实例.调用方法
print(DataStructureIterator iterator)来打印奇数索引的元素.使用一个匿名类作为方法的参数,代替接口DataStructureIterator的实例.提示:你无法访问
DataStructure之外的私有成员SIZE和arrayOfInts,意味着你不能从匿名类访问定义在其之外的私用成员.定义一个方法
print(java.util.Function<Integer, Boolean> iterator)实现print(DataStructureIterator iterator)相同的功能.通过一个lambda表达式参数调用该方法实现打印出偶数下标的元素,重新用lambda表达式参数调用并实现打印出奇数下标的元素。提示: 在
print方法中,你可以通过for语句遍历arrayOfInts.对于每一个下标志,调用function.apply方法。如果方法返回True,打印出下表对应的元素值。为了实现打印偶数下标的值,你可以定义特定的Lambda表达式实现
Boolean Function.apply(Integer t)方法.表达式接受一个Integer参数 (下标)并且返回一个布尔值 (Boolean.TRUE如果下标是偶数, 否则返回Boolean.FALSE).定义两个方法可以是如下语句分别打印偶数下标对应的值和技术下标对应的值:
1234DataStructure ds = new DataStructure()// ...ds.print(DataStructure::isEvenIndex);ds.print(DataStructure::isOddIndex);提示: 在类中
DataStructure创建两个名为isEvenIndex和isOddIndex的方法,两个方法拥有同样的参数列和且返回类型,同抽象方法Boolean Function<Integer, Boolean>.apply(Integer t)一致. 这两个方法同样接受Integer参数 (下标志) 并且返回Boolean值.
答案: 参考文件
DataStructure.java.