这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
内部类演示
为了看看内部类的应用,首先考虑下数组。在接下来的示例中,创建一个数组,向里面填充整形数值,然后以升序方式输出偶数下标位置的元素。
DataStructure.java 示例包括:
- DataStructure外部类:它包括一个创建DataStructure对象的构造器,一个填充整型值(1、2、3等等)的数组,以及一个输出偶数下标元素的方法。
- EvenIterator 内部类,它实现了DataStructureIterator 接口,该接口继承Iterator< Integer>。迭代器通常用来步进一个数据结构,会有方法来测试最后一个元素,获取当前元素,移动到下一个元素。
- main方法实例化DataStructure对象,然后会调用printEven方法打印数组arrayOfInts中偶数下标元素
public class DataStructure{
private static int SIZE = 15;
private int[] arrayOfInts = new int[SIZE];
public DataStructure(){
for(int i=0;i<SIZE;i++){
arrayOfInts[i] = i;
}
}
public void printEven(){
DataStructureIterator iterator = this.new EvenIterator();
while(iterator.hasNext()){
System.out.print(iterator.next() + " ");
}
System.out.println("");
}
interface DataStructureIterator extends java.util.Iterator<Integer>{}
private class EvenIterator implements DataStructureIterator {
private int nextIndex = 0;
public boolean hasNext(){
return (nextIndex < SIZE);
}
public Integer next(){
Integer retValue = Integer.valueOf(arrayOfInts[nextIndex]);
nextIndex += 2;
return retValue;
}
}
public static void main(String[] args){
DataStructure ds = new DataStructure();
ds.printEven();
}
}
输出结果为:
0 2 4 6 8 10 12 14
注意EvenIterator类直接引用了DataStructure 中的arrayOfInts 变量。
可以使用内部类来作为辅助类,正如上面示例中这样。为处理用户界面事件,你必须知道如何使用内部类,因为事件处理机制广泛地使用了内部类。
局部类和匿名类
内部类有两种形式。你可以在方法体中声明一个内部类,这种类叫做局部类。你还可以在方法内部声明一个不命名的内部类,这种类我们称做匿名类。
修饰符
在内部类上可以使用外部类成员所使用的任何修饰符。比如,你可以使用访问控制修饰符private、protected、public来限制内部类的访问,就如同你用它来控制其他成员的访问一样。