Ich möchte wissen, warum Java statische Felder / Methoden innerhalb innerer Klassen verbietet
Weil diese inneren Klassen innere "Instanz" -Klassen sind. Das heißt, sie sind wie ein Instanzattribut des umschließenden Objekts.
Da es sich um "Instanz" -Klassen handelt, ist es nicht sinnvoll, static
Funktionen zuzulassen , da static
diese zunächst ohne Instanz funktionieren sollen.
Es ist, als würden Sie gleichzeitig versuchen, ein statisches / Instanzattribut zu erstellen.
Nehmen Sie das folgende Beispiel:
class Employee {
public String name;
}
Wenn Sie zwei Instanzen von Mitarbeitern erstellen:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Es ist klar, warum jeder seinen eigenen Wert für die Immobilie hat name
, oder?
Das gleiche passiert mit der inneren Klasse; Jede innere Klasseninstanz ist unabhängig von der anderen inneren Klasseninstanz.
Wenn Sie also versuchen, ein counter
Klassenattribut zu erstellen , können Sie diesen Wert nicht auf zwei verschiedene Instanzen verteilen.
class Employee {
public String name;
class InnerData {
static count; // ??? count of which ? a or b?
}
}
Was wäre beim Erstellen der Instanz a
und b
im obigen Beispiel ein korrekter Wert für die statische Variable count
? Es ist nicht möglich, es zu bestimmen, weil die Existenz derInnerData
Klasse vollständig von jedem der umschließenden Objekte abhängt.
Deshalb static
braucht die Klasse, wenn sie als deklariert wird , keine lebende Instanz mehr, um sich selbst zu leben. Da keine Abhängigkeit mehr besteht, können Sie ein statisches Attribut frei deklarieren.
Ich denke, das klingt wiederholt, aber wenn Sie über die Unterschiede zwischen Instanz- und Klassenattributen nachdenken, ist dies sinnvoll.