|
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.