Java oferuje różnorodne typy klas wewnętrznych, które pozwalają na efektywne zarządzanie przestrzenią nazw i lepszą organizację kodu. Dwie z nich to klasy wewnętrzne typu Member oraz Local. Te dwa typy różnią się zakresem, sposobem deklaracji oraz dostępnością.
Przykład kodu z klasą wewnętrzną Member i Local
Poniżej przedstawiam przykład, który ilustruje zastosowanie obu tych klas:
// Klasa zewnętrzna
public class OuterClass {
    private String outerField = "Zewnętrzne pole";
    // Klasa wewnętrzna typu Member
    class MemberInner {
        void display() {
            // Dostęp do pola klasy zewnętrznej
            System.out.println(outerField);
        }
    }
    void testClasses() {
        // Instancja klasy wewnętrznej Member
        MemberInner member = new MemberInner();
        member.display();
        // Klasa wewnętrzna typu Local w metodzie
        class LocalInner {
            void display() {
                // Dostęp do pola klasy zewnętrznej
                System.out.println(outerField + " (lokalne)");
            }
        }
        // Instancja klasy wewnętrznej Local
        LocalInner local = new LocalInner();
        local.display();
    }
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.testClasses();
    }
}
Komentarze do kodu
- Klasa wewnętrzna Member (MemberInner):
- Jest to niestatyczna klasa zdefiniowana na poziomie innego obiektu.
- Może dostępować do wszystkich pól i metod klasy zewnętrznej, niezależnie od ich modyfikatorów dostępu.
 
- Klasa wewnętrzna Local (LocalInner):
- Zdefiniowana wewnątrz metody i nie jest widoczna poza tą metodą.
- Może korzystać z finalnych lub efektywnie finalnych zmiennych lokalnych z tej metody.
 
Podsumowanie
Klasy wewnętrzne typu Member i Local różnią się głównie zakresem i dostępnością. Member Inner Class może być używana wszędzie w klasie zewnętrznej i ma dostęp do wszystkich jej członków, podczas gdy Local Inner Class jest ograniczona do bloku, w którym została zdefiniowana, co zapewnia większą kontrolę nad widocznością i żywotnością instancji klasy. W praktyce wybór między tymi typami zależy od specyficznych potrzeb i struktury projektu.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

