Рівень 23

Які бувають внутрішні класи?

  • Вкладені класи поділяються на два види: статичні та не статичні.
  • Вкладені класи, оголошені як статичні, називаються вкладеними статичними (static nested classes).
  • Вкладені не статичні класи називаються внутрішніми (inner classes).

У що компілюється анонімний внутрішній клас?

У внутрішній не статичний клас

Навіщо використовувати ключове слово final під час створення анонімних класів?

Як правильно створити об'єкт внутрішнього класу?

Внутрішні (не статичні) класи, як змінні та методи пов'язані з об'єктом зовнішнього класу. Внутрішні класи також мають прямий доступ до полів зовнішнього класу. Такі класи не можуть містити статичні методи і поля. Внутрішні класи що неспроможні існувати без екземпляра зовнішнього. Для створення об'єкта:

Як правильно створити об'єкт вкладеного класу?

Синтаксис створення об'єкта вкладеного класу:

Чи можна створювати статичні методи/змінні у внутрішньому класі?

Статичні методи/змінні оголошувати у внутрішньому класі (не вкладеному) не можна.

Внутрішні (не статичні) класи, як змінні та методи пов'язані з об'єктом зовнішнього класу. Такі класи не можуть містити статичні методи і поля.

Назвіть три будь-які внутрішні класи?

  1. private static class Holder - вкладений клас HashMap з java.util.
  2. В інтерфейсі Map є interface Entry, який знову ж таки в HashMap і реалізується в іншому вкладеному класі static class Entry implements Map.Entry.
  3. private static class IntegerCache в класі Integer.

Як внутрішні класи вирішують проблему множинного успадкування в Java?

Т.к. множинне спадкування класів у Java заборонено, цю проблему вирішують за допомогою внутрішніх класів: у потрібному класі ми оголошуємо внутрішній клас і успадковуємо його від необхідного класу. Приклад:

Чим відрізняються анонімні класи, створені на основі інтерфейсу та на основі класу?

Таким чином, єдина відмінність в анонімних класах, створених на основі інтерфейсу та класу, полягає у кількості абстракних методів, які необхідно реалізувати.

Ініціалізації анонімного класу на основі інтерфейсу вимагатиме реалізації кожного методу, у той час як при ініціалізації анонімного класу на основі абстрактного/конкретного класу дозволить змінити поведінку за рахунок навантаження методів та вимагатиме реалізації абстракних методів.

Чи можна створити анонімний статичний вкладений клас?

Ні, статичною стає лише змінна, але не клас.