Heim >Java >javaLernprogramm >Warum können innere Java-Klassen keine statischen Felder haben?
Warum Java statische Felder in inneren Klassen verbietet
Java verbietet statische Felder und Methoden in inneren Klassen, da diese inneren Klassen als „Instanzen“ gelten innere Klassen, was bedeutet, dass sie von Natur aus an eine Instanz des Einschließenden gebunden sind Klasse.
Instanzinnere Klassen verstehen
Instanzinnere Klassen ähneln Instanzattributen einer umschließenden Klasse. Sie werden erstellt, wenn eine Instanz der umschließenden Klasse erstellt wird, und ihre Existenz ist von dieser Instanz abhängig. Daher macht es wenig Sinn, statische Funktionen innerhalb dieser inneren Klassen zuzulassen.
Statische Attribute und Abhängigkeiten
Statische Elemente, wie z. B. statische Felder und Methoden, sind darauf ausgelegt unabhängig von einer bestimmten Objektinstanz sein. Wenn ein statisches Feld innerhalb einer inneren Instanzklasse definiert werden würde, würde es eine Abhängigkeit von der umschließenden Instanz einführen, was dem Zweck statischer Attribute widerspricht.
Beispiel: Zählerattribut
Betrachten Sie ein Beispiel, bei dem das Ziel darin besteht, die Anzahl der erstellten InnerClass-Objekte zu zählen. Wenn wir wie unten gezeigt ein statisches Zählerfeld innerhalb von InnerClass definieren würden:
class OuterClass { class InnerClass { static int count; // Compile error } }
Dies würde zu Verwirrung führen, da unklar ist, auf welche Instanzanzahl sich dieses Feld bezieht. Wenn mehrere Instanzen von OuterClass erstellt werden, jede mit ihrer eigenen InnerClass, gäbe es Unklarheiten bei der Bestimmung der Gesamtzahl.
Statische innere Klassen
Java erlaubt statische Klassen oder „verschachtelte“ innere Klassen, die wie folgt deklariert werden:
class OuterClass { static class InnerClass { static int count = 0; // Valid static field } }
Statische innere Klassen sind unabhängig von umschließendes Objekt und kann statische Felder und Methoden haben. Sie sind jedoch immer noch eng mit der einschließenden Klasse verbunden und können nur auf die statischen Mitglieder der einschließenden Klasse zugreifen.
Das obige ist der detaillierte Inhalt vonWarum können innere Java-Klassen keine statischen Felder haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!