Jakie są różnice między klasą wewnętrzną Member a klasą wewnętrzną Local w Javie?

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

  1. 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.
  2. 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.

Scroll to Top