Sobes.tech
Middle

Czym są klasy zagnieżdżone i jak są stosowane w programowaniu?

sobes.tech AI

Odpowiedź od AI

Klasy zagnieżdżone to klasy zadeklarowane wewnątrz innej klasy. Pozwalają logicznie grupować klasy używane tylko w jednym miejscu, zwiększają enkapsulację i czynią kod bardziej czytelnym.

Klasy zagnieżdżone dzielą się na:

  • Statyczne (Statyczne klasy zagnieżdżone): Nie mają dostępu do nie-statycznych członków klasy zewnętrznej. Mogą być tworzone bez instancji klasy zewnętrznej.
  • Niestatyczne (Klasy wewnętrzne): mają dostęp do wszystkich członków klasy zewnętrznej (w tym prywatnych). Do tworzenia instancji klasy wewnętrznej niestatycznej potrzebna jest instancja klasy zewnętrznej.

Zastosowania:

  • Ukrywanie implementacji: Klasa zagnieżdżona może służyć jako klasa pomocnicza, której szczegóły implementacji nie powinny być dostępne na zewnątrz.
  • Grupowanie: Logiczne połączenie ściśle powiązanych klas.
  • Implementacja callbacków / słuchaczy: Często używana do tworzenia anonimowych klas wewnętrznych do implementacji interfejsów lub klas abstrakcyjnych.
  • Iteratory: Klasa wewnętrzna jest wygodna do implementacji iteratora, ponieważ ma dostęp do wewnętrznego stanu kolekcji.

Przykład (Java):

class OuterClass {
    private int outerField;

    // Statyczna klasa zagnieżdżona
    static class StaticNestedClass {
        void print() {
            // Nie ma dostępu do outerField
            System.out.println("Z StaticNestedClass");
        }
    }

    // Klasa wewnętrzna niestatyczna
    class InnerClass {
        void print() {
            // Ma dostęp do outerField
            System.out.println("outerField: " + outerField);
        }
    }
}
// Tworzenie instancji klasy zagnieżdżonej statycznej
OuterClass.StaticNestedClass staticNested = new OuterClass.StaticNestedClass();
staticNested.print();

// Tworzenie instancji klasy wewnętrznej
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.print();