Sobes.tech
Middle

Was sind die Unterschiede zwischen verschachtelten (nested) und inneren (inner) Klassen in Java?

sobes.tech KI

Antwort von AI

  • Verschachtelte Klassen (Nested classes): Statische Mitglieder der äußeren Klasse. Haben keinen direkten Zugriff auf nicht-statische Mitglieder (Felder und Methoden) der äußeren Klasse, nur über eine Instanz der äußeren Klasse. Werden mit dem Schlüsselwort static deklariert.

  • Innere Klassen (Inner classes): Nicht-statische Mitglieder der äußeren Klasse. Haben vollen Zugriff auf alle Mitglieder (statische und nicht-statische) der äußeren Klasse, einschließlich privater. Für die Erstellung einer Instanz einer inneren Klasse ist eine Instanz der äußeren Klasse erforderlich. Verwenden kein static-Schlüsselwort.

Beispiel:

// Äußere Klasse
class Outer {
    private int outerField = 10;
    private static int staticOuterField = 20;

    // Statische verschachtelte Klasse
    static class StaticNestedClass {
        void display() {
            // Zugriff nur auf statische Mitglieder der äußeren Klasse
            System.out.println("Statische verschachtelte Klasse: " + staticOuterField);
            // Kein direkter Zugriff auf outerField
            // System.out.println(outerField); // Kompilierungsfehler
        }
    }

    // Nicht-statische innere Klasse
    class InnerClass {
        void display() {
            // Zugriff auf alle Mitglieder der äußeren Klasse
            System.out.println("Innere Klasse: " + outerField);
            System.out.println("Innere Klasse (statisch): " + staticOuterField);
        }
    }
}

// Verwendung
public class Main {
    public static void main(String[] args) {
        // Erstellen einer Instanz der statischen verschachtelten Klasse
        Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
        staticNested.display();

        // Erstellen einer Instanz der inneren Klasse erfordert eine Instanz der äußeren Klasse
        Outer outer = new Outer();
        Outer.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}
Merkmal Verschachtelte Klasse (Nested Class) Innere Klasse (Inner Class)
Schlüsselwort static Nein
Zugriff auf Mitglieder der äußeren Klasse Nur statische Alle
Erfordert eine Instanz der äußeren Klasse zur Erstellung Nein Ja
Verbindung zur Instanz der äußeren Klasse Nein Ja