Sobes.tech
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.

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.