文档

Java™ 教程-Java Tutorials 中文版
内部类示例
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: Nested Classes

内部类示例

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

接下来的 DataStructure.java 示例包括:

 
public class DataStructure {
    
    // Create an array
    private final static int SIZE = 15;
    private int[] arrayOfInts = new int[SIZE];
    
    public DataStructure() {
        // fill the array with ascending integer values
        for (int i = 0; i < SIZE; i++) {
            arrayOfInts[i] = i;
        }
    }
    
    public void printEven() {
        
        // Print out values of even indices of the array
        DataStructureIterator iterator = this.new EvenIterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        System.out.println();
    }
    
    interface DataStructureIterator extends java.util.Iterator<Integer> { } 

    // Inner class implements the DataStructureIterator interface,
    // which extends the Iterator<Integer> interface
    
    private class EvenIterator implements DataStructureIterator {
        
        // Start stepping through the array from the beginning
        private int nextIndex = 0;
        
        public boolean hasNext() {
            
            // Check if the current element is the last in the array
            return (nextIndex <= SIZE - 1);
        }        
        
        public Integer next() {
            
            // Record a value of an even index of the array
            Integer retValue = Integer.valueOf(arrayOfInts[nextIndex]);
            
            // Get the next even element
            nextIndex += 2;
            return retValue;
        }
    }
    
    public static void main(String s[]) {
        
        // Fill the array with integer values and print out only
        // values of even indices
        DataStructure ds = new DataStructure();
        ds.printEven();
    }
}

输出是:

0 2 4 6 8 10 12 14 

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

你可以使用内部类来实现帮助程序类,例如本示例中显示的帮助程序类。要处理用户界面事件,你必须知道如何使用内部类,因为事件处理机制会广泛使用它们。

局部类和匿名类

还有两种类型的内部类。你可以在方法体内声明内部类。这些类称为 local classes (局部类)。你还可以在方法体内声明内部类,而无需命名该类。这些类称为 anonymous classes (匿名类)

修饰符

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


Previous page: Nested Classes
Next page: Local Classes