Wie in anderen Antworten erwähnt, wurde die Möglichkeit, Implementierungen zu einer Schnittstelle hinzuzufügen, hinzugefügt, um Abwärtskompatibilität im Collections-Framework zu ermöglichen. Ich würde behaupten, dass die Bereitstellung von Abwärtskompatibilität möglicherweise der einzige gute Grund ist, um Implementierungen zu einer Schnittstelle hinzuzufügen.
Ansonsten, wenn Sie Implementierungen zu einer Schnittstelle hinzufügen, brechen Sie das grundlegende Gesetz, warum Schnittstellen überhaupt hinzugefügt wurden. Java ist eine Single-Inheritance-Sprache, im Gegensatz zu C++, das mehrfache Vererbung zulässt. Schnittstellen bieten die Vorteile der Typisierung, die mit einer Sprache, die mehrere Vererbung unterstützt, einhergehen, ohne die Probleme der mehrfachen Vererbung einzuführen.
Konkret erlaubt Java nur die Einzelvererbung einer Implementierung, gestattet jedoch die Mehrfachvererbung von Schnittstellen. Zum Beispiel ist der folgende Java-Code gültig:
class MyObject erweitert String implementiert Runnable, Comparable { ... }
MyObject
erbt nur eine Implementierung, aber drei Verträge.
Java verzichtete auf die Mehrfachvererbung von Implementierungen, weil damit eine Vielzahl von komplizierten Problemen einhergeht, die den Rahmen dieser Antwort sprengen. Schnittstellen wurden hinzugefügt, um die Mehrfachvererbung von Verträgen (auch bekannt als Schnittstellen) zu ermöglichen, ohne die Probleme der Mehrfachvererbung von Implementierungen zu verursachen.
Zur Unterstützung meines Standpunkts hier ein Zitat von Ken Arnold und James Gosling aus dem Buch Die Java-Programmiersprache, 4. Ausgabe:
Die Einzelvererbung schließt einige nützliche und korrekte Designs aus. Die Probleme der Mehrfachvererbung ergeben sich aus der Mehrfachvererbung von Implementierungen, aber in vielen Fällen wird Mehrfachvererbung verwendet, um eine Reihe von abstrakten Verträgen und vielleicht eine konkrete Implementierung zu erben. Die Möglichkeit, einen abstrakten Vertrag zu erben, ohne eine Implementierung zu übernehmen, ermöglicht die Vorteile der Typisierung bei Mehrfachvererbung, ohne die Probleme der Mehrfachimplementierungsvererbung. Die Vererbung eines abstrakten Vertrags wird als _Schnittstellenerb_ung bezeichnet. Die Java-Programmiersprache unterstützt die Schnittstellenerb durch die Deklaration eines Schnittstelle
-Typs