Sobes.tech
Junior

Czym są klasy zagnieżdżone?

sobes.tech AI

Odpowiedź od AI

Zagnieżdżone klasy (Nested Classes) to klasy zdefiniowane wewnątrz innej klasy. Dzielą się na dwa główne typy:

  1. Statyczne klasy zagnieżdżone (Static Nested Classes): Podobne do statycznych członków klasy zewnętrznej. Nie mają bezpośredniego dostępu do nie-statycznych członków klasy zewnętrznej. Tworzone bez instancji klasy zewnętrznej.

    Przykład w Java:

    class OuterClass {
        static int outerStaticField;
        int outerInstanceField;
    
        static class StaticNestedClass {
            void accessOuterStatic() {
                // Dostęp do statycznego członka OuterClass
                int value = OuterClass.outerStaticField;
            }
    
            // Nie ma bezpośredniego dostępu do outerInstanceField
            // void accessOuterInstance() {
            //     int value = outerInstanceField; // Błąd kompilacji
            // }
        }
    }
    
  2. Klasy wewnętrzne (Inner Classes): Nie-statyczne. Mają dostęp do wszystkich członków klasy zewnętrznej, w tym statycznych i nie-statycznych, nawet prywatnych. Instancja klasy wewnętrznej jest powiązana z instancją klasy zewnętrznej. Tworzone przy użyciu instancji klasy zewnętrznej.

    Przykład w Java:

    class OuterClass {
        static int outerStaticField;
        int outerInstanceField;
    
        class InnerClass {
             void accessOuterMembers() {
                 // Dostęp do statycznych i nie-statycznych członków OuterClass
                 int staticValue = OuterClass.outerStaticField;
                 int instanceValue = outerInstanceField;
             }
        }
    }
    

Istnieją także specyficzne typy klas wewnętrznych:

  • Klasy lokalne (Local Classes): Definiowane wewnątrz bloku (np. metody, konstruktora lub bloku inicjalizacji). Dostępne tylko w tym bloku.
  • Klasy anonimowe (Anonymous Classes): Nie mają nazwy. Używane do tworzenia jednorazowych implementacji interfejsu lub rozszerzeń klasy. Definiowane i tworzone jednocześnie.

Zalety zagnieżdżonych klas:

  • Logiczne grupowanie: Pozwalają grupować klasy, które są logicznie powiązane, poprawiając czytelność kodu.
  • Enkapsulacja: Mogą mieć dostęp do prywatnych członków klasy zewnętrznej, zapewniając silniejszą enkapsulację.
  • Prostszy kod: Ułatwiają pisanie kodu dla klas używanych tylko przez inną klasę.

Zastosowania w QA Automation:

  • Page Object Model: Klasy wewnętrzne lub statyczne mogą służyć do organizacji elementów strony (np. sekcji, okien modalnych) w głównej klasie Page Object.
  • Obsługa zdarzeń / Callbacki: Klasy anonimowe lub lokalne mogą służyć do implementacji testów z użyciem callbacków lub obsługi zdarzeń, np. przy pracy z elementami UI lub słuchaczami.
  • Klasy konfiguracyjne: Statyczne klasy zagnieżdżone mogą zawierać stałe lub parametry konfiguracyjne specyficzne dla klasy zewnętrznej.