Внутрішнім класом називають клас, який є членом іншого класу. Існує чотири базових типу внутрішніх класів в Java:
Nested Inner classes (вкладені внутрішні класи)
Static Nested classes or Member of outer class (статичні вкладені класи)
Method Local Inner classes (внутрішні класи в локальному методі)
Anonymous Inner classes (анонімні класи)
1. Nested Inner classes
Вкладений внутрішній клас може отримати доступ до будь-якого приватному полю або методу екземпляра зовнішнього класу. Вкладений внутрішній клас може мати будь-який модифікатор доступу (private. Package - private. Protected. Public). Так само як і класи, інтерфейси можуть бути вкладеними і мати модифікатори доступу.
Наступний приклад демонструє використання вкладеного внутрішнього класу:
Основна причина, по якій необхідно оголошувати локальну змінну як фінальну полягає в тому що, локальна змінна живе в стеці до тих пір, поки метод знаходиться в стеку. А в разі використання внутрішнього класу можлива ситуація, коли екземпляр внутрішнього класу живе в купі і після виходу з методу, але йому може бути необхідний доступ до змінної, оголошеної в методі. Для цього, компілятор може зберегти копію локальної змінної, яка оголошена як фінальна, в поле внутрішнього класу для подальшого використання.
Внутрішній клас в локальному методі не може бути позначений як private. protected. static і transient. але може бути позначений як abstract і final. але не обидва одночасно.
4. Anonymous Inner classes
Анонімні внутрішні класи оголошуються без вказівки імені класу. Вони можуть бути створені двома шляхами:
- Як спадкоємець певного класу
У коді вище ми створюємо об'єкт анонімного внутрішнього класу, але цей анонімний внутрішній клас є реалізацією інтерфейсу Hello.
Будь анонімний внутрішній клас може за один раз реалізувати тільки один інтерфейс. Так само, за один раз можна або розширити клас, або реалізувати інтерфейс, але не одночасно.
Приклади коду зі статті:
Приклади коду від перекладача:
More from my site
- Вебінар «Як написати рекурсию, щоб не зарекурсіться, і знаходимо голку навіть в стозі сіна»
- Вебінар «Використання Stream API при роботі з колекціями»
- Оптимізація сортування вставками в Java
- Вебінар «Від ідеї до прототипу за 1 годину»
- Вебінар «Java-пасаж: розбираємося з масивами в Java. Best practices. »
- Вебінар «Все, що ви хотіли знати про лямбда в Java, але боялися запитати. Extended Edition. »
відмінно написано і дуже зрозумілі приклади
Спасибі, хороший матеріал.
Пишіть ще!
Вебінар «Java Collections framework під мікроскопом»
Знайти без секундоміра за мінімум збігів 3 найшвидших коні серед 25