Sobes.tech
Junior

Czym są klasy zagnieżdżone?

sobes.tech AI

Odpowiedź od AI

Klasy zagnieżdżone to klasy zadeklarowane wewnątrz innej klasy. Dzielą się na dwa główne typy: klasy zagnieżdżone statyczne (członkowie statyczni klasy) i klasy wewnętrzne (członkowie niestatyczni).

Klasy zagnieżdżone statyczne:

  • Są powiązane z klasą zewnętrzną, a nie z jej instancją.
  • Mogą odwoływać się tylko do statycznych członków klasy zewnętrznej.
  • Mogą być tworzone bez instancji klasy zewnętrznej.

Klasy wewnętrzne:

  • Są powiązane z instancją klasy zewnętrznej.
  • Mogą odwoływać się do wszystkich członków klasy zewnętrznej (statycznych i niestatycznych), w tym prywatnych.
  • Wymagają instancji klasy zewnętrznej do ich utworzenia.

Przykłady użycia:

  • Grupowanie: Logicznie powiązane klasy można łączyć, aby poprawić czytelność i organizację kodu.
  • Enkapsulacja: Klasy wewnętrzne mają dostęp do prywatnych członków klasy zewnętrznej, co pozwala na enkapsulację szczegółów implementacji.
  • Słuchacze zdarzeń (Java): Często używane do tworzenia anonimowych klas wewnętrznych.
  • Klasy pomocnicze: Małe klasy używane tylko przez klasę zewnętrzną.
// Przykład klasy zagnieżdżonej statycznej
class OuterClass {
    static int outerStaticField = 1;
    int outerInstanceField = 2;

    static class StaticNestedClass {
        void display() {
            System.out.println("Pole statyczne zewnętrzne: " + outerStaticField);
            // Nie można bezpośrednio odwołać się do outerInstanceField
        }
    }
}

// Przykład klasy wewnętrznej
class AnotherOuterClass {
    int outerField = 10;

    class InnerClass {
        void display() {
            System.out.println("Pole zewnętrzne: " + outerField); // Dostęp do pola klasy zewnętrznej
        }
    }
}

Tabela porównawcza:

Cecha Klasa zagnieżdżona statyczna Klasa wewnętrzna
Związek Z klasą zewnętrzną Z instancją klasy zewnętrznej
Dostęp do członków zewnętrznych Tylko statyczne Wszystkie członkowie (w tym prywatne)
Wymaga instancji Nie Tak
Może zawierać członków statycznych Tak Nie (z wyjątkiem stałych)