JavaRush /Java блог /Random UA /Рівень 23. Відповіді на запитання до співбесіди на тему р...
zor07
31 рівень
Санкт-Петербург

Рівень 23. Відповіді на запитання до співбесіди на тему рівня

Стаття з групи Random UA
Рівень 23. Відповіді на запитання до співбесіди на тему рівня - 1
  1. Які бувають внутрішні класи?

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

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

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

    Якщо визначається анонімний внутрішній клас і потрібно при цьому використовувати об'єкти, визначені поза цим внутрішнім класом, компілятор вимагає, щоб надіслані ними посилання оголошувалися незмінними (final). Без такого оголошення ви отримаєте повідомлення про помилку під час компіляції програми.

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

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

    Outer outer = new Outer();
    Innter inner = outer.new Inner();
  5. Як правильно створити об'єкт вкладеного класу?

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

    OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
  6. Чи можна створювати статичні методи/змінні у внутрішньому класі?

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

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

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

    1. private static class Holder-Вкладений клас HashMapз java.util.
    2. В інтерфейсі Mapє interface Entry<K,V>, який знову ж таки HashMapі реалізується в іншому вкладеному класі static class Entry<K,V> implements Map.Entry<K,V>.
    3. private static class IntegerCacheу класі Integer.
  8. Як внутрішні класи вирішують проблему множинного успадкування Java?

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

    class Tiger extends Cat
    {
    
     public void tigerRun()
     {
      .....
     }
    
    public void startTiger()
     {
      TigerThread thread = new TigerThread();
      thread.start();
     }
    
     class TigerThread extends Thread
     {
      public void run()
      {
       tigerRun();
      }
     }
    }
  9. Чим відрізняються анонімні класи, створені на основі інтерфейсу та на основі класу?

    Анонімний клас згідно з JLS 15.9.5 є виразом, в якому оголошення нового класу та його ініціалізація поєднані:

    • При оголошенні класу буде створено новий клас, похідний від зазначеного класу при використанні як базу іншого класу, або реалізує інтерфейс при використанні як базу інтерфейсу.
    • При ініціалізації буде створено новий об'єкт і на нього буде повернення посилання: анонімний клас є конкретним.

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

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

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

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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ