为了查看内部类使用,首先考虑用一个数组。下面的例子中,你创建一个数组,存放整数。然后按升序顺序输出。
DataStructure.java包含以下部分:
- 外部类DataStructure包含一个构造器来创建实例,这实例包含一组连续的整数值(0,1,2,3等等)和一个打印元素的方法。
- 内部类EventIterator,实现了DataStructureIterator接口,这接口继承Iterator< Integer>接口。Iterators被用于遍历一个数据结构和测试最后元素的方法。检索当前元素,删除下一个元素等。
- 一个main方法,实例化一个DataStructure对象,然后调用printEven方法来打印出数组arrayOfInts中的元素。
public class DataStructure{
private final 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-1);
}
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
类EvenInterator直接饮用DataStructure对象的arrayOfInts属性。
你可以使用内部类来实现帮助类,如这个例子所示。为了处理用户接口事件,你必须知道怎么使用内部类,因为事件处理机制广泛被使用。
局部内部类和匿名内部类
有两种内部类,你可以再一个方法体中声明一个内部类,即为局部类;你也可以声明一个只有主体而没有名字的内部类,即为匿名类。
修饰符
你可以像其他外部类成员使用修饰符一样给内部类使用。例如,你可以使用访问权限如private,public,protected来限制对内部类的访问,就如同使用它们来限制其他类成员限制一样。