Vererbung statischer Methoden in Java
In der Dokumentation zur Vererbung in Java wird erläutert, dass Mitglieder basierend auf ihrer Zugänglichkeit vererbt werden. Allerdings scheint es bei statischen Methoden eine Diskrepanz zu geben.
Statische Methoden werden laut Dokumentation nicht vererbt. Aber der folgende Code zeigt, dass auf statische Methoden in Unterklassen zugegriffen werden kann:
class A { public static void display() { System.out.println("Inside static method of superclass"); } } class B extends A { public void show() { // This works - accessing display() by its simple name - // meaning it is inherited according to the book. display(); } }
Wie ist das möglich?
Die Antwort liegt in der zugrunde liegenden Implementierung der Vererbung in Java. Alle zugänglichen Methoden werden von Unterklassen geerbt, unabhängig von ihrem Typ (statisch oder Instanz). Es gibt jedoch einen subtilen Unterschied zwischen der Vererbung statischer Methoden und Instanzmethoden.
Wenn eine neue statische Methode mit derselben Signatur in einer Unterklasse definiert wird, wird die alte statische Methode ausgeblendet und nicht überschrieben. Dies bedeutet, dass die neue statische Methode Vorrang hat, wenn sie von der Unterklasse aufgerufen wird. Auf die ursprüngliche statische Methode kann jedoch weiterhin über den Namen der Oberklasse zugegriffen werden.
Im Gegensatz dazu ersetzt die neue Instanzmethode die alte Instanzmethode vollständig, wenn eine Instanzmethode in einer Unterklasse überschrieben wird. Aus diesem Grund kann in Unterklassen nicht über ihren einfachen Namen auf geerbte Instanzmethoden zugegriffen werden.
Obwohl statische Methoden in der Java-Dokumentation nicht explizit als vererbt erwähnt werden, werden sie zusammen mit allen anderen zugänglichen Mitgliedern implizit vererbt. Der einzige Unterschied bei der Vererbung statischer Methoden besteht darin, dass sie in Unterklassen durch statische Methoden mit derselben Signatur ausgeblendet werden können.
Das obige ist der detaillierte Inhalt vonErben statische Methoden in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!