Path: csiph.com!news.mixmin.net!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!news-2.dfn.de!news.dfn.de!news.uni-stuttgart.de!news.enyo.de!.POSTED!not-for-mail From: Florian Weimer Newsgroups: de.comp.lang.java Subject: Re: =?iso-8859-1?Q?Grunds=E4tzliche?= Frage zu Interfaces Date: Mon, 28 Mar 2016 20:23:44 +0200 Lines: 29 Message-ID: <878u12o40f.fsf@mid.deneb.enyo.de> References: <878u41ku68.fsf@mid.deneb.enyo.de> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: news.enyo.de 1459189424 5348 192.168.18.20 (28 Mar 2016 18:23:44 GMT) X-Complaints-To: news@enyo.de Cancel-Lock: sha1:BSIsErhjy6bAL96mO/BFQwpHp5k= Xref: csiph.com de.comp.lang.java:12916 * Thomas Grund: > Florian Weimer wrote: >> * Thomas Grund: >> >>> D'accord! Gegenfrage: Der heutige Einsatz von Interfaces ist ja vor >>> allem, die Austauschbarkeit der Implementierungen sicherzustellen >>> (also z.B. OpenJPA durch Hibernate ersetzen zu können, ohne den Code >>> ändern zu müssen). Kann man etwas Vergleichbares auch ohne Interfaces? >> >> Mit abstrakten Klassen geht das. Ältere Java-APIs machen das auch >> (z.B. java.io.InputStream), weil der Klassen-basierte Methodenaufruf >> ohne JIT-Compiler so viel schneller ist als der Umweg über Interfaces. > > Stimmt. Sie müssen nicht mal abstrakt sein. Interfaces machen halt > (nomen est omen) die Schnittstellen deutlicher. > > Und da wäre noch die Mehrfachvererbung: Bei > > class A implements B, C {} > > kann man A wahlweise in B oder C injizieren. Allerdings habe ich dafür > noch keine Anwendung gesehen. Man kann immer (*) eine Methode schreiben, die ein Proxy-Objekt für A zurückgibt, welches die Methoden von B oder C bereitstellt. (*) Es gibt ggf. Probleme, das vollständig typsicher hinzubekommen, aber den Effekt hat man auch bei Interfaces wie Comparable.