Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Классы и Объекты
Вложенные Классы
Домашняя страница > Изучение Языка Java > Классы и Объекты

Вложенные Классы

Язык программирования Java позволяет Вам определять class в пределах другого class. Такой class вызывают вложенным class и иллюстрируется здесь:

class OuterClass {
    ...
    class NestedClass {
        ...
    }
}

Терминология: Вложенные классы делятся на две категории: статичный и нестатичный. Вложенные классы, которые объявляются static просто вызываются статическими вложенными классами. Нестатические вложенные классы вызывают внутренними классами.
class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}

Вложенный class является элементом своего включения class. У нестатических вложенных классов (внутренние классы) есть доступ к другим элементам включения class, даже если они объявляются частные. У статических вложенных классов нет доступа к другим элементам включения class. Как элемент OuterClass, вложенный class может быть объявлен private, public, protected, или частный пакет. (Вспомните, что внешние классы могут только быть объявлены public или частный пакет.)

Почему Использование Вложенные Классы?

Есть несколько неопровержимых доводов использования вложенных классов среди них:

Логическая группировка классов — Если class полезен только для одного другого class, то логично встроить это в то, что class и держит два вместе. Вложение такие "классы помощника" делает их пакет более оптимизированным.

Увеличенная инкапсуляция — Рассматривает два высокоуровневых класса, A и B, где B нуждается в доступе к элементам, который был бы иначе объявлен private. Скрывая class B в пределах class A, элементы А могут быть объявлены частные, и B может получить доступ к ним. Кроме того, сам B может быть скрыт от внешнего мира.

Больше читаемого, удобного в сопровождении кода — Вложение, маленькие классы в пределах высокоуровневых классов помещают код ближе туда, где это используется.

Статические Вложенные Классы

Как с методами class и переменными, статический вложенный class связывается с его внешним class. И как статические методы class, статический вложенный class не может обратиться непосредственно к переменным экземпляра или методам, определенным в его включении class — это может использовать их только через ссылку на объект.


Отметьте: статический вложенный class взаимодействует с членами экземпляра своего внешнего class (и другие классы) точно так же как любой другой верхний уровень class. В действительности статический вложенный class является поведенчески верхним уровнем class, который был вложен в другом верхнем уровне class для того, чтобы упаковать удобство.

К статическим вложенным классам получают доступ, используя включение имя class:

OuterClass.StaticNestedClass

Например, чтобы создать объект для статического вложенного class, используйте этот синтаксис:

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();

Внутренние Классы

Как с методами экземпляра и переменными, внутренний class связывается с экземпляром его включения class и имеет прямой доступ к методам того объекта и полям. Кроме того, потому что внутренний class связывается с экземпляром, он не может определить статические элементы самостоятельно.

Объекты, которые являются экземплярами внутреннего class, существуют в пределах экземпляра внешнего class. Рассмотрите следующие классы:

class OuterClass {
    ...
    class InnerClass {
        ...
    }
}

Экземпляр InnerClass может существовать только в пределах экземпляра OuterClass и имеет прямой доступ к методам и полям его экземпляра включения. Следующее число иллюстрирует эту идею.

Экземпляр InnerClass Существует В пределах Экземпляра OuterClass.

Экземпляр InnerClass Существует В пределах Экземпляра OuterClass

Чтобы инстанцировать внутреннего class, следует сначала инстанцировать внешнего class. Затем, создайте внутренний объект в пределах внешнего объекта с этим синтаксисом:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Дополнительно, есть два специальных вида внутренних классов: локальные классы и анонимные классы (также названный анонимными внутренними классами). Оба из них будут обсуждены кратко в следующем разделе.


Отметьте: Если Вы хотите больше информации о таксономии различных видов классов в языке программирования Java (который может быть хитрым, чтобы описать кратко, ясно, и правильно), Вы могли бы хотеть считать блог Джозефа Дарси: Вложенный, Внутренний, Элемент и Высокоуровневые Классы.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Вопросы и Упражнения: Объекты
Следующая страница: Внутренний Пример Класса