Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы видеть внутренний class в использовании, сначала давайте рассматривать массив. В следующем примере мы создадим массив, заполним его целочисленными значениями и затем выведем только значения даже индексов массива в порядке возрастания.
DataStructure
class ниже состоит из:
DataStructure
внешний class, который включает методы, чтобы добавить целое число на массив и распечатать значения даже индексов массива.InnerEvenIterator
внутренний class, который подобен стандартному Java iterator. Iterators используются, чтобы ступить через структуру данных и обычно иметь методы, чтобы протестировать на последний элемент, получить текущий элемент, и переместиться в следующий элемент.main
метод, который инстанцирует a DataStructure
объект (ds
) и использование это, чтобы заполниться arrayOfInts
массив с целочисленными значениями (0, 1, 2, 3, и т.д.), затем вызывает a printEven
метод, чтобы распечатать значения даже индексов arrayOfInts
.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 InnerEvenIterator iterator = this.new InnerEvenIterator(); while (iterator.hasNext()) { System.out.println(iterator.getNext() + " "); } } // inner class implements the Iterator pattern private class InnerEvenIterator { // start stepping through the array from the beginning private int next = 0; public boolean hasNext() { // check if a current element is the last in the array return (next <= SIZE - 1); } public int getNext() { // record a value of an even index of the array int retValue = arrayOfInts[next]; //get the next even element next += 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
Отметьте что InnerEvenIterator
class обращается непосредственно к arrayOfInts
переменная экземпляра DataStructure
объект.
Внутренние классы могут использоваться, чтобы реализовать классы помощника как один показанный в примере выше. Если Вы запланируете обработку событий пользовательского интерфейса, то Вы должны будете знать, как использовать внутренние классы, потому что механизм обработки событий делает широкое применение из них.
Есть два дополнительных типа внутренних классов. Можно объявить внутренний class в пределах тела метода. Такой class известен как локальный внутренний class. Можно также объявить внутренний class в пределах тела метода, не называя это. Эти классы известны как анонимные внутренние классы. Вы встретитесь с такими классами в усовершенствованном программировании Java.
Можно использовать те же самые модификаторы для внутренних классов, которые Вы используете для других элементов внешнего class. Например, можно использовать спецификаторы доступа — private
, public
, и protected
— ограничить доступ к внутренним классам, как Вы делаете к другим элементам class.