Heim > Java > javaLernprogramm > Wie geht Java mit mehreren Schnittstellen mit identischen Methodensignaturen um?

Wie geht Java mit mehreren Schnittstellen mit identischen Methodensignaturen um?

Linda Hamilton
Freigeben: 2024-12-03 03:15:14
Original
391 Leute haben es durchsucht

How Does Java Handle Multiple Interfaces with Identical Method Signatures?

Implementieren mehrerer Schnittstellen mit denselben Methodensignaturen

In Java, wenn eine Klasse mehrere Schnittstellen implementiert, die Methoden mit demselben Namen und definieren Signatur stellt sich die Frage: Welche Methode wird überschrieben?

Laut Gemäß der Java Language Specification (JLS) bestimmt der Compiler die zu überschreibende Methode anhand der folgenden Regel:

Geerbte Methoden von mehreren Schnittstellen gelten als „override-äquivalent“. " (JLS 8.4.8.4), wenn sie die gleiche Signatur haben. Daher ist nur eine Methodenimplementierung erforderlich.

Beispiel:

public class Test implementiert A, B { <br> public static void main(String... args) throws Exception{ </p>
<p>}</p>
<p>@Override<br> public int f() { // von welcher Schnittstelle A oder B</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">return 0;
Nach dem Login kopieren

}
}
< ;/pre>

In diesem Code implementiert die Klasse Test die Schnittstellen A und B, die beide eine Methode namens f() mit derselben haben Unterschrift. Da diese Methoden überschreibungsäquivalent sind, spielt es keine Rolle, welche f()-Methode der Schnittstelle von Test.f() überschrieben wird. Es ist nur eine Implementierung erforderlich und der Compiler unterscheidet nicht zwischen den beiden Schnittstellen.

Dieses Verhalten erstreckt sich auch auf die Vererbung und das Ausblenden von Methoden. Wenn eine Schnittstellenmethode mit einer Methode in der Oberklasse oder einer anderen Schnittstelle in Konflikt steht, müssen die in Konflikt stehenden Methoden überschreibungsäquivalent sein, damit der Code gültig ist.

Kompatibilitätsbeispiel :

<br>public interface Gift { void gegenwärtig(); }<br>public interface Guest { void present(); }</p>
<p>public class Presentable implementiert Gift, Guest { <br> @Override <br> public void present() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">System.out.println("Heeeereee's Johnny!!!");
Nach dem Login kopieren

}
}

Hier haben sowohl Gift als auch Guest eine present()-Methode. Die Presentable-Klasse implementiert beide Schnittstellen und stellt eine einzige Implementierung für present() bereit. Der Compiler erkennt, dass diese Methoden Override-äquivalent sind und keine separaten Implementierungen erfordern.

Inkompatibilitätsbeispiel:

public interface Gift { void present(); }<br>public interface Guest { boolean present(); }</p><p>public class Presentable implementiert Gift, Guest { // WIRD NICHT KOMPILIERT!!!<br> // Fehler: Typen Gift und Guest sind inkompatibel<br>}<br>

In diesem Fall sind die Rückgabetypen der present()-Methoden unterschiedlich. Gemäß JLS 8.4.8.3 müssen überschreibende Methoden kompatible Signaturen und Rückgabetypen haben. Da Gift.present() und Guest.present() keine kompatiblen Rückgabetypen haben, wird der Code nicht kompiliert.

Zusammenfassend lässt sich sagen, dass der Compiler dies tun wird, wenn mehrere Schnittstellen mit denselben Methodensignaturen implementiert werden Identifizieren Sie die zu überschreibende Methode als die Methode, die dem Überschreiben entspricht. Dies bedeutet, dass nur eine Methodenimplementierung erforderlich ist, unabhängig davon, welche Schnittstelle die Methode definiert.

Das obige ist der detaillierte Inhalt vonWie geht Java mit mehreren Schnittstellen mit identischen Methodensignaturen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Welche Rolle spielt das WEB-INF-Verzeichnis bei der Sicherung einer Java EE-Webanwendung? Nächster Artikel:Struts 2 INPUT-Ergebnis: Wie werden Konvertierungs- und Validierungsfehler behandelt und warum wird ein INPUT-Ergebnis anstelle einer Ausnahme zurückgegeben?
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage