文档

Java™ 教程
隐藏目录
内部类示例
路径:学习Java语言
课程:类和对象
章节:嵌套类

内部类示例

为了查看内部类的使用方法,首先考虑一个数组。在下面的示例中,您创建一个数组,填充它的整数值,然后仅按升序输出数组的偶数索引值。

下面的示例是DataStructure.java

 
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> { } 

    // 内部类实现DataStructureIterator接口,
    // 该接口扩展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 s[]) {
        
        // 填充数组并仅打印偶数索引的值
        DataStructure ds = new DataStructure();
        ds.printEven();
    }
}

输出结果为:

0 2 4 6 8 10 12 14 

请注意,EvenIterator类直接引用了DataStructure对象的arrayOfInts实例变量。

您可以使用内部类来实现辅助类,就像在这个例子中所示的那样。为了处理用户界面事件,您必须知道如何使用内部类,因为事件处理机制广泛使用了它们。

局部类和匿名类

还有两种额外的内部类类型。您可以在方法体内声明内部类。这些类被称为局部类。您还可以在方法体内声明内部类而不给类命名。这些类被称为匿名类

修饰符

您可以为内部类使用与外部类的其他成员相同的修饰符。例如,您可以使用访问修饰符privatepublicprotected来限制对内部类的访问,就像限制对其他类成员的访问一样。


上一页: 嵌套类
下一页: 局部类