Экзамен ООП | Блок 7 Flashcards
Что такое вложенные классы? Зачем они нужны?
Вложенный (nested) класс - класс, который определен внутри другого класса.
- Имеет область действия равную области действия внешнего класса;
- Имеет доступ к членам внешнего класса, в т.ч. закрытым;
- Внешний класс не имеет доступа к членам внутреннего;
- Вложенный класс не существует независимо от внешнего класса;
Вложенные классы делятся на:
- Статические (static);
- Нестатические;
Когда используются?
- Когда реализуемый класс необходимо скрыть от других классов того же пакета, т.е. повысить инкапсуляцию;
- Когда нам необходим полный доступ к полям и методам класса, членом которого будет являться вложенный класс;
- Для увеличения логической связанности и читаемости кода, когда вложенный класс используется только во внешнем классе и располагается ближе к месту использования.
Какие типы вложенных классов существуют в Java?
Вложенные классы делятся на:
- Статические (static) ;
- Нестатические (внутренние классы);
- Внутренние;
- Локальные;
- Анонимные;
Что такое внутренний класс? Когда он применяется?
Внутренний (inner) класс - нестатический вложенный класс, связанный с объектом внешнего класса.
- Имеет доступ ко всем полям и методам (в т.ч. private) внешнего класса и может ссылаться на них напрямую;
- Имеет доступ ко всем полям и методам родителей внешнего класса, к которым имеет доступ внешний класс (public, protected);
- Может наследовать обычные классы и внутренние классы, определенные во внешнем классе и его предках;
- Может быть наследован внутренними классами, определенными во внешнем классе и его наследниках;
- Может имплементировать интерфейсы;
- Может содержать только нестатические методы, статические поля должны быть объявлены final;
Внутренние (inner) классы делятся на:
- Внутренние классы - нестатические вложенные классы, связанные с объектом внешнего класса.
- Локальные классы - объявленные внутри блока и не являющиеся членом внешнего класса. В этом случае можно рассматривать класс как локальную переменную типа класс.
- Анонимные классы - наследуемые от класса, при объявлении не задается имя класса.
Что такое статический вложенный класс? Когда он применяется?
Статический вложенный класс - разновидность вложенного класса, объявляемая с модификатором static. В отличие от внутренних (inner) классов является более независимым. Принадлежит внешнему классу, а не экземпляру класса.
- Имеет доступ к статическим полям и методам внешнего класса (в т.ч. private);
- Если создан экземпляр класса, то можно получить доступ ко всем нестатическим полям и методам внешнего класса (в т.ч. private);
- Может содержать статические и нестатические поля и методы;
- Может быть создан в неограниченных количествах;
- Может наследовать обычные классы и статические вложенные классы, определенные во внешнем классе и его предках;
- Может быть наследован любым классом!;
- Область видимости определяется согласно модификатора доступа;
Когда используются?
- Когда прямая связь между вложенным и внешним классом не требуется.
Сколько объектов статического вложенного класса можно создать в программе?
Статический вложенный класс может быть создан в неограниченных количествах.
Что такое локальный класс? Когда он применяется?
Локальный класс является подвидом внутреннего класса, объявленного внутри какого-либо блока кода {}
. Не является членом внешнего класса и, по сути, является локальной переменной типа Класс.
- Имеет наименование, может быть использован неоднократно;
- Область видимости как у локальной переменной;
- В зависимости от того, в каком контексте объявлен - static, non static, имеет доступ либо только к статическим, либо ко всем (включая private) полям и методам внешнего класса;
- В нестатическом контексте содержит ссылку на внешний класс;
- Время жизни ограничено временем жизни блока кода, в котором объявлен локальный класс, либо существующими ссылками на объект этого класса;
- В объявлении локального класса допустим только модификатор final.
- Работает только с final или Effective final переменными;
- Может содержать в себе нестатические свойства и методы и статические константы (static final);
- Может наследовать:
- обычные классы;
- внутренние классы, определенные во внешнем классе и его предках;
- локальные классы, определенные в том же методе;
- Может быть наследован локальным классом, определенным в том же методе;
- Может имплементировать интерфейс;
Когда используются?
- Локальные классы - это способ инкапсуляции. Используются для создания вспомогательных классов в пределах блока кода или метода;
Что такое анонимный класс? Когда он применяется?
Анонимный класс - это локальный класс без имени, который обязательно наследует какой-либо класс или реализует какой-либо интерфейс. Нужен в случае, когда нам необходим локальный класс для одноразового использования.
- Из него видны все свойства и методы внешнего класса (обычные и static), а так же public и protected свойства и методы родителя внешнего класса, т.е. те, которые видны во внешнем классе.
- Может содержать в себе только нестатические переменные и методы.
- Анонимный класс живет, пока не него существует ссылка;
- Виден только в методе, в котором определен;
- Не может быть наследован;
Сколько объектов анонимного класса можно создать в программе?
Анонимный класс не имеет имени и его экземпляр создается сразу же вместе с его объявлением, поэтому можно создать только один экземпляр анонимного класса.