Рівень 23
Які бувають внутрішні класи?
- Вкладені класи поділяються на два види: статичні та не статичні.
- Вкладені класи, оголошені як статичні, називаються вкладеними статичними (static nested classes).
- Вкладені не статичні класи називаються внутрішніми (inner classes).
У що компілюється анонімний внутрішній клас?
У внутрішній не статичний клас
Навіщо використовувати ключове слово final під час створення анонімних класів?
Як правильно створити об'єкт внутрішнього класу?
Внутрішні (не статичні) класи, як змінні та методи пов'язані з об'єктом зовнішнього класу. Внутрішні класи також мають прямий доступ до полів зовнішнього класу. Такі класи не можуть містити статичні методи і поля. Внутрішні класи що неспроможні існувати без екземпляра зовнішнього. Для створення об'єкта:
Як правильно створити об'єкт вкладеного класу?
Синтаксис створення об'єкта вкладеного класу:
Чи можна створювати статичні методи/змінні у внутрішньому класі?
Статичні методи/змінні оголошувати у внутрішньому класі (не вкладеному) не можна.
Внутрішні (не статичні) класи, як змінні та методи пов'язані з об'єктом зовнішнього класу. Такі класи не можуть містити статичні методи і поля.
Назвіть три будь-які внутрішні класи?
- private static class Holder - вкладений клас HashMap з java.util.
- В інтерфейсі Map є interface Entry, який знову ж таки в HashMap і реалізується в іншому вкладеному класі static class Entry implements Map.Entry.
- private static class IntegerCache в класі Integer.
Як внутрішні класи вирішують проблему множинного успадкування в Java?
Т.к. множинне спадкування класів у Java заборонено, цю проблему вирішують за допомогою внутрішніх класів: у потрібному класі ми оголошуємо внутрішній клас і успадковуємо його від необхідного класу. Приклад:
Чим відрізняються анонімні класи, створені на основі інтерфейсу та на основі класу?
Таким чином, єдина відмінність в анонімних класах, створених на основі інтерфейсу та класу, полягає у кількості абстракних методів, які необхідно реалізувати.
Ініціалізації анонімного класу на основі інтерфейсу вимагатиме реалізації кожного методу, у той час як при ініціалізації анонімного класу на основі абстрактного/конкретного класу дозволить змінити поведінку за рахунок навантаження методів та вимагатиме реалізації абстракних методів.
Чи можна створити анонімний статичний вкладений клас?
Ні, статичною стає лише змінна, але не клас.