Wie in anderen Antworten erwähnt, wurde die Möglichkeit hinzugefügt, einer Schnittstelle eine Implementierung hinzuzufügen, um die Abwärtskompatibilität im Collections-Framework zu gewährleisten. Ich würde argumentieren, dass die Bereitstellung von Abwärtskompatibilität möglicherweise der einzige gute Grund ist, einer Schnittstelle eine Implementierung hinzuzufügen.
Wenn Sie andernfalls einer Schnittstelle eine Implementierung hinzufügen, verstoßen Sie gegen das Grundgesetz, warum Schnittstellen überhaupt hinzugefügt wurden.Java ist im Gegensatz zu C ++ eine einzelne Vererbungssprache, die eine Mehrfachvererbung ermöglicht. Schnittstellen bieten die Tippvorteile einer Sprache, die Mehrfachvererbung unterstützt, ohne die Probleme einzuführen, die mit Mehrfachvererbung verbunden sind.
Insbesondere erlaubt Java nur die einmalige Vererbung einer Implementierung, jedoch die mehrfache Vererbung von Schnittstellen. Folgendes ist beispielsweise gültiger Java-Code:
class MyObject extends String implements Runnable, Comparable { ... }
MyObject
erbt nur eine Implementierung, aber drei Verträge.
Java hat die Mehrfachvererbung der Implementierung weitergegeben, da die Mehrfachvererbung der Implementierung mit einer Vielzahl heikler Probleme verbunden ist, die außerhalb des Rahmens dieser Antwort liegen. Schnittstellen wurden hinzugefügt, um die Mehrfachvererbung von Verträgen (auch als Schnittstellen bezeichnet) ohne die Probleme der Mehrfachvererbung der Implementierung zu ermöglichen.
Um meinen Standpunkt zu unterstützen, hier ein Zitat von Ken Arnold und James Gosling aus dem Buch The Java Programming Language, 4. Auflage :
Eine einzelne Vererbung schließt einige nützliche und korrekte Entwürfe aus. Die Probleme der Mehrfachvererbung ergeben sich aus der Mehrfachvererbung der Implementierung, aber in vielen Fällen wird die Mehrfachvererbung verwendet, um eine Reihe abstrakter Verträge und möglicherweise eine konkrete Implementierung zu erben. Die Bereitstellung eines Mittels zum Erben eines abstrakten Vertrags ohne Erben einer Implementierung ermöglicht die Typisierungsvorteile der Mehrfachvererbung ohne die Probleme der Mehrfachimplementierungsvererbung. Die Vererbung eines abstrakten Vertrags wird als
Schnittstellenvererbung bezeichnet . Die Programmiersprache Java unterstützt die Vererbung von Schnittstellen, indem Sie einen interface
Typ deklarieren können