Java-Schnittstellenimplementierung und Methodennamenkollisionen
Bei der Implementierung mehrerer Schnittstellen in Java kann es zu Methodennamenkollisionen kommen. Dies tritt auf, wenn Schnittstellen mit unterschiedlichen Zwecken Methoden mit derselben Signatur definieren. Im Gegensatz zu C#, wo die explizite Schnittstellenimplementierung mehrere Implementierungen derselben Methode ermöglicht, bietet Java keinen ähnlichen Mechanismus.
Begründung für die Einschränkung von Java
Java verbietet mehrere Implementierungen von Verwenden Sie dieselbe Methode, um mögliche Unklarheiten und Verwirrungen zu vermeiden. Dadurch wird sichergestellt, dass ein Methodenaufruf unabhängig von der aufrufenden Schnittstelle immer dieselbe zugrunde liegende Implementierung aufruft.
Beispiel
Betrachten Sie den folgenden Code:
interface ISomething { void doSomething(); } interface ISomething2 { void doSomething(); } class Impl implements ISomething, ISomething2 { void doSomething() {} // Java only allows one implementation of this method. }
In diesem Beispiel gibt es keine Möglichkeit, jeweils zwei separate Implementierungen der doSomething()-Methode in der Impl-Klasse zu definieren Schnittstelle.
Problemumgehung
Wenn Sie ein eindeutiges Verhalten basierend auf der aufrufenden Schnittstelle benötigen, sollten Sie einen kompositorischen Ansatz in Betracht ziehen, indem Sie eine zusammengesetzte Klasse erstellen, die an einzelne Klassen delegiert, die bestimmte implementieren Schnittstellen:
class CompositeClass { ISomething class1; ISomething2 class2; void doSomething1(){class1.doSomething();} void doSomething2(){class2.doSomething();} }
In dieser Lösung stellt die CompositeClass eine Fassade für die Implementierung beider Schnittstellen bereit und delegiert gleichzeitig an separate Klassen für bestimmte Methoden Implementierungen.
Das obige ist der detaillierte Inhalt vonWie geht Java mit Methodennamenkollisionen um, wenn mehrere Schnittstellen implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!