In Versionen vor Java 16 wurde versucht, eine statische Methode innerhalb einer nichtstatischen zu definieren Die innere Klasse führt zu einem Compilerfehler. Diese Einschränkung ergibt sich aus der inhärenten Beziehung zwischen inneren Klassen und ihren umschließenden Klassen.
Grund:
Eine Instanz einer nicht statischen inneren Klasse ist implizit mit einer Instanz verknüpft seiner umschließenden Klasse. Das bedeutet, dass jede Methode innerhalb der inneren Klasse Zugriff auf die Instanzvariablen und Methoden der umschließenden Klasse hat. Statische Methoden gehören jedoch nicht zu einer bestimmten Instanz, sondern zur Klasse selbst. Daher können sie nicht direkt auf instanzbezogene Daten oder Methoden zugreifen.
Beispiel:
Betrachten Sie den folgenden Code:
<code class="java">public class Foo { class Bar { static void method() {} // Compiler error } }</code>
Der Compiler wird Geben Sie einen Fehler aus, da die method()-Methode innerhalb der nicht statischen inneren Klasse Bar als statisch deklariert ist. Da die Bar-Klasse nicht statisch ist, sind ihre Instanzen mit Instanzen von Foo verknüpft. Daher kann die method()-Methode nicht unabhängig von einer Foo-Instanz existieren.
Statische innere Klassen:
Im Gegensatz dazu ermöglicht die Deklaration der inneren Klasse als statisch statische Klassen Methoden darin.
<code class="java">public class Foo { static class Bar { // now static static void method() {} } }</code>
Eine statische innere Klasse hat dagegen keine direkte Verbindung mit Instanzen ihrer umschließenden Klasse. Das bedeutet, dass seine Methoden nicht auf instanzspezifische Daten oder Methoden zugreifen können. Sie können jedoch weiterhin auf statische Mitglieder der umschließenden Klasse zugreifen.
Java 16:
In Java 16 und höher können sowohl statische als auch nicht statische innere Klassen definieren statische Methoden. Dies ist auf die Einführung des neuen Modifikators für statische Methoden zurückzuführen, der es ihnen ermöglicht, unabhängig von jeder Objektinstanz zu existieren.
Das obige ist der detaillierte Inhalt vonWarum können Sie keine statischen Methoden in nichtstatischen inneren Klassen definieren (vor Java 16)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!