-
Jakie są klasy wewnętrzne?
- Klasy zagnieżdżone dzielą się na dwa typy: statyczne i niestatyczne.
- Klasy zagnieżdżone zadeklarowane jako statyczne nazywane są statycznymi klasami zagnieżdżonymi.
- Zagnieżdżone klasy niestatyczne nazywane są klasami wewnętrznymi.
-
Do czego kompiluje się anonimowa klasa wewnętrzna?
Do wewnętrznej klasy niestatycznej
-
Po co używać słowa kluczowego
final
podczas tworzenia anonimowych klas?Jeśli zdefiniowano anonimową klasę wewnętrzną i musi ona używać obiektów zdefiniowanych poza tą klasą wewnętrzną, kompilator wymaga, aby przekazane do niej odniesienia zostały zadeklarowane jako niezmienne (końcowe). Bez takiej deklaracji podczas kompilacji programu pojawi się błąd.
-
Jak poprawnie utworzyć obiekt klasy wewnętrznej?
Klasy wewnętrzne (niestatyczne), podobnie jak zmienne i metody, są powiązane z obiektem klasy zewnętrznej. Klasy wewnętrzne mają także bezpośredni dostęp do pól klasy zewnętrznej. Klasy takie nie mogą zawierać metod i pól statycznych. Klasy wewnętrzne nie mogą istnieć bez instancji zewnętrznej. Aby utworzyć obiekt:
Outer outer = new Outer(); Innter inner = outer.new Inner();
-
Jak poprawnie utworzyć obiekt klasy zagnieżdżonej?
Składnia tworzenia obiektu klasy zagnieżdżonej jest następująca:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
-
Czy można tworzyć statyczne metody/zmienne w klasie wewnętrznej?
Metody/zmienne statyczne nie mogą być deklarowane w klasie wewnętrznej (nie zagnieżdżonej).
Klasy wewnętrzne (niestatyczne), podobnie jak zmienne i metody, są powiązane z obiektem klasy zewnętrznej. Klasy takie nie mogą zawierać metod i pól statycznych.
-
Wymień trzy klasy wewnętrzne?
private static class Holder
—zagnieżdżona klasaHashMap
zjava.util
.- Interfejs
Map
mainterface Entry<K,V>
, który ponownie znajduje się wHashMap
innej klasie zagnieżdżonej i jest zaimplementowany w innej klasie zagnieżdżonejstatic class Entry<K,V> implements Map.Entry<K,V>
. private static class IntegerCache
w klasieInteger
.
-
W jaki sposób klasy wewnętrzne rozwiązują problem wielokrotnego dziedziczenia w Javie?
Ponieważ Wielokrotne dziedziczenie klas jest w Javie zabronione, problem ten rozwiązuje się za pomocą klas wewnętrznych: w potrzebnej nam klasie deklarujemy klasę wewnętrzną i dziedziczymy ją z wymaganej klasy. Przykład:
class Tiger extends Cat { public void tigerRun() { ..... } public void startTiger() { TigerThread thread = new TigerThread(); thread.start(); } class TigerThread extends Thread { public void run() { tigerRun(); } } }
-
Jaka jest różnica między anonimowymi klasami opartymi na interfejsie i klasami?
Klasa anonimowa według JLS 15.9.5 to wyrażenie, w którym łączy się deklarację nowej klasy i jej inicjalizację:
- Podczas deklarowania klasy zostanie utworzona nowa klasa, która wywodzi się z określonej klasy, gdy jest używana jako baza innej klasy, lub implementuje interfejs, gdy jest używana jako baza interfejsu.
- Podczas inicjalizacji zostanie utworzony nowy obiekt i zostanie zwrócona do niego referencja: klasa anonimowa jest konkretna.
Zatem jedyną różnicą między anonimowymi klasami opartymi na interfejsie i klasami jest liczba abstrakcyjnych metod, które należy zaimplementować.
Инициализации анонимного класса на основе интерфейса потребует реализации каждого метода, в то время Jak при инициализации анонимного класса на основе абстрактного/конкретного класса позволит изменить поведение за счет перегрузки методов и потребует реализации абстракных методов.
-
Можно ли создать анонимный статический вложенный класс?
Нет, статической становится только переменная, но не класс.
GO TO FULL VERSION