Documentation

The Java™ Tutorials
Hide TOC
Inner Class Example内部类示例
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: Nested Classes

Inner Class Example内部类示例

To see an inner class in use, first consider an array.要查看使用中的内部类,首先考虑数组。In the following example, you create an array, fill it with integer values, and then output only values of even indices of the array in ascending order.在下面的示例中,将创建一个数组,用整数值填充它,然后按升序仅输出该数组偶数索引的值。

The DataStructure.java example that follows consists of:下面的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();
    }
}

The output is:输出为:

0 2 4 6 8 10 12 14

Note that the EvenIterator class refers directly to the arrayOfInts instance variable of the DataStructure object.请注意,EvenIterator类直接引用DataStructure对象的arrayOfInts实例变量。

You can use inner classes to implement helper classes such as the one shown in the this example.您可以使用内部类来实现帮助器类,如本例中所示。To handle user interface events, you must know how to use inner classes, because the event-handling mechanism makes extensive use of them.要处理用户界面事件,您必须知道如何使用内部类,因为事件处理机制广泛使用它们。

Local and Anonymous Classes局部和匿名类

There are two additional types of inner classes.还有两种附加类型的内部类。You can declare an inner class within the body of a method.可以在方法体中声明内部类。These classes are known as local classes.这些类称为局部类You can also declare an inner class within the body of a method without naming the class.您还可以在方法体中声明内部类,而无需命名该类。These classes are known as anonymous classes.这些类称为匿名类

Modifiers修饰符

You can use the same modifiers for inner classes that you use for other members of the outer class.对于内部类,可以使用与外部类的其他成员相同的修改器。For example, you can use the access specifiers private, public, and protected to restrict access to inner classes, just as you use them to restrict access do to other class members.例如,可以使用访问说明符privatepublicprotected来限制对内部类的访问,就像使用它们来限制对其他类成员的访问一样。


Previous page: Nested Classes
Next page: Local Classes