Вложенный / внутренний класс - это просто класс, который используется только в контексте другого класса, у которого нет собственного файла класса. Если он связан с экземпляром, он может быть создан только в контексте экземпляра родительского класса; он может видеть личные данные или только частные статические данные, если это статический класс.
Сайт разработчика Java имеет учебное руководство по вложенным классам с одним примером:
http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
Несколько примеров использования:
- Скрыть конкретную реализацию
Интерфейс:
(Думая о сеансе базы данных для такого инструмента, как Hibernate): Предположим, у вас есть интерфейс Session и SessionFactory, который возвращает экземпляр Session. Конкретный класс SessionImpl, который реализует интерфейс Session, может быть внутренним классом фабрики, который знает, как его создать и инициализировать.
- Предоставление информации путем реализации
Интерфейс:
В веб-платформе Wicket каждый компонент с графическим интерфейсом имеет связанную «модель», задачей которой является привязка данных к компоненту. Интерфейс выглядит примерно так:
public interface IModel extends IDetachable {
public Object getObject();
public Object setObject();
}
Предположим, у вас есть специальная логика для извлечения данных для пользовательского компонента GUI, который вы написали. Поскольку никакой другой компонент не получает данные таким же образом, вы можете использовать анонимный класс в точке, где предоставляется IModel, для обеспечения извлечения данных. Если у вас есть другая точка в том же классе, где вам нужно повторно использовать реализацию IModel, вы можете сделать ее внутренним классом. Позже, если вам нужна модель в другом месте, вы можете преобразовать ее в класс верхнего уровня.
Обычно вы используете внутренний класс в ситуации, когда вам нужно определение класса, но этот класс можно использовать только или имеет смысл только в контексте родительского класса.