嵌套类:问题与练习
问题
问题: 程序
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
.