Middle
Czym są klasy zagnieżdżone?
sobes.tech AI
Odpowiedź od AI
Klasa zagnieżdżona to klasa zdefiniowana wewnątrz innej klasy.
Rodzaje klas zagnieżdżonych w Javie:
-
Statyczne klasy zagnieżdżone (Static Nested Classes):
- Dostępne z klasy zewnętrznej bez jej instancji.
- Nie mają bezpośredniego dostępu do niestatycznych pól i metod klasy zewnętrznej.
- Deklarowane za pomocą słowa kluczowego
static.
-
Klasy wewnętrzne (Inner Classes):
- Klasy członkowskie wewnętrzne (Member Inner Classes):
- Deklarowane na poziomie członków klasy zewnętrznej.
- Mają dostęp do wszystkich członków klasy zewnętrznej (w tym prywatnych).
- Wymagają instancji klasy zewnętrznej do utworzenia własnej instancji.
- Klasy lokalne wewnętrzne (Local Inner Classes):
- Definiowane wewnątrz metody, konstruktora lub bloku inicjalizacyjnego.
- Widoczne tylko w obrębie tej metody/bloku.
- Mają dostęp do zmiennych lokalnych finalnych lub efektywnie finalnych kontekstu zewnętrznego.
- Klasy anonimowe (Anonymous Inner Classes):
- Klasy bez nazwy.
- Używane do tworzenia obiektów, które natychmiast implementują interfejs lub rozszerzają klasę.
- Definiowane i tworzone w jednej operacji.
- Klasy członkowskie wewnętrzne (Member Inner Classes):
Przykład statycznej klasy zagnieżdżonej:
class OuterClass {
private static String msg = "Hello from Outer";
static class StaticNestedClass {
public void display() {
// Może uzyskać dostęp do statycznych członków klasy zewnętrznej
System.out.println(msg);
}
}
}
// Użycie
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();
Przykład klasy członkowskiej wewnętrznej:
class OuterClass {
private String msg = "Hello from Outer";
class InnerClass {
public void display() {
// Może uzyskać dostęp do wszystkich członków klasy zewnętrznej
System.out.println(msg);
}
}
}
// Użycie
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();
Zalety używania klas zagnieżdżonych:
- Grupowanie: Logicznie powiązane klasy mogą być grupowane.
- Enkapsulacja: Klasy wewnętrzne mogą mieć dostęp do prywatnych członków klasy zewnętrznej, poprawiając enkapsulację.
- Czytelność i utrzymanie: Ukrywają klasy pomocnicze wewnątrz głównej klasy.
- Wydajność: Mogą być używane do tworzenia bardziej zwartych i wydajnych struktur danych.