Java Schnittstellen

Fragerjava

Mitglied
Hi, also ich bin ein Java neu Anfänger. Nun befass ich mich gerade mit Schnittstellen. Ich weiß was Vorteile von Schnittstellen sind (Mehrfachvererbung) nun wollte ich es mal auf ein Beispiel in API beziehen, z.B auf die contains Methode in String und kann joch keine so richtige Verbindung ziehen. Könnte mir wer die Vorteile von Schnittstellen anhand der contains-methode erklären?
Gruß
 
Irgendwie verstehe ich gerade nicht, was Du wissen willst bzw. worauf du hinaus willst.

contains ist eine konkrete Methode von String. Diese wird aber einfach von String bereit gestellt und nicht durch irgend ein Interface.

Daher ist die Fragestellung zumindest für mich erst einmal unverständlich.

Der große Vorteil von Interfaces ist bei der objektorientierten Entwicklung ansonsten vor allem, dass nicht gegen konkrete Implementationen sondern gegen abstrakte Ideen entwickelt werden kann. Das ist halt die Abstraktion und auch eine Form von Normierung. Und das ist halt, was einen generell in der realen Welt begleitet. Wir abstrahieren generell und lernen dann z.B. einen PKW mit Handschaltung zu fahren. Ohne Abstraktion könntest Du genau das Modell fahren, das die Fahrschule hatte und jeden anderen PKW könntest Du nicht fahren.
Und das ist in der Softwareentwicklung nicht anders. Du brauchst eine Liste. Aber wie die genau implementiert wurde, ist Dir erst einmal egal.
 
Ich weiß was Vorteile von Schnittstellen sind (Mehrfachvererbung) ...
Vorteil gegenüber was? Dass eine Klasse mehrere Java-Interfaces implementieren kann, ist nicht wirklich ein Vorteil, weil du es ja nicht mit etwas anderem vergleichst.
Wie @KonradN schon sagte, liegt der Nutzen von Interfaces eher in der Abstraktion und somit in der Erreichung von Polymorphie und der Realisierung von Softwaredesign-Mustern wie z.B. Proxies, Facaden und Adaptoren.
Dass eine Java-Klasse mehrere Schnittstellen implementieren kann, ermöglicht dann andere Sachen wie z.B. Interface Segregation (viele kleine dedizierte Schnittstellen für einzelne Aspekte einer Klasse) - siehe hier "S.O.L.I.D."
 
Irgendwie verstehe ich gerade nicht, was Du wissen willst bzw. worauf du hinaus willst.

contains ist eine konkrete Methode von String. Diese wird aber einfach von String bereit gestellt und nicht durch irgend ein Interface.

Daher ist die Fragestellung zumindest für mich erst einmal unverständlich.

Der große Vorteil von Interfaces ist bei der objektorientierten Entwicklung ansonsten vor allem, dass nicht gegen konkrete Implementationen sondern gegen abstrakte Ideen entwickelt werden kann. Das ist halt die Abstraktion und auch eine Form von Normierung. Und das ist halt, was einen generell in der realen Welt begleitet. Wir abstrahieren generell und lernen dann z.B. einen PKW mit Handschaltung zu fahren. Ohne Abstraktion könntest Du genau das Modell fahren, das die Fahrschule hatte und jeden anderen PKW könntest Du nicht fahren.
Und das ist in der Softwareentwicklung nicht anders. Du brauchst eine Liste. Aber wie die genau implementiert wurde, ist Dir erst einmal egal.
Ja stimmt, meine Frage wahr unpräzise gestellt. Tut mir leid. Genau genommen geht es mir um die Vorteile der Benutzung von Schnittstellen als Datentypen anhand des Eingabeparameters der contain methode, hoffe ist bisschen verständlicher. Aber vielen Dank schonmal für die Erklärung, hat mir geholfen Schnittstellen schonmal im Allgemeinen zu verstehen.
 
Ok, der Parameter CharSequence sorgt dafür, dass die Methode deutlich mehr Parameter entgegen nehmen kann. Eine mögliche Alternative wäre ja gewesen, da statt CharSequence ein String zu nehmen. Aber dann müsste man immer erst einen String erstellen. So kann man aber direkt auch einen StringBuffer, StringBuilder, CharBuffer, ... übergeben.

Und wenn ich eine eigene Klasse habe, die ich da übergeben möchte, dann muss ich keinen Umweg über einen String nehmen. Ich kann mit meiner Klasse einfach CharSequence implementieren und schon könnte ich eine Instanz meiner Klasse direkt übergeben.

Aus Sicht des Erstellers von String.contains ist das also nichts anderes, als dass die Klasse deutlich vielseitiger nutzbar ist.
 
Ok, der Parameter CharSequence sorgt dafür, dass die Methode deutlich mehr Parameter entgegen nehmen kann. Eine mögliche Alternative wäre ja gewesen, da statt CharSequence ein String zu nehmen. Aber dann müsste man immer erst einen String erstellen. So kann man aber direkt auch einen StringBuffer, StringBuilder, CharBuffer, ... übergeben.

Und wenn ich eine eigene Klasse habe, die ich da übergeben möchte, dann muss ich keinen Umweg über einen String nehmen. Ich kann mit meiner Klasse einfach CharSequence implementieren und schon könnte ich eine Instanz meiner Klasse direkt übergeben.

Aus Sicht des Erstellers von String.contains ist das also nichts anderes, als dass die Klasse deutlich vielseitiger nutzbar ist.
Super Erklärung, vielen Dank.
 
Schnittstellen.. im Allgemeinen
Interfaces machen auch dann Sinn, wenn häufig(er) Änderungen / Erweiterungen an der Software vorgenommen werden. Bspl. Auto: man weiss wie es gefahren wird (wobei sich einige Neuentwicklungen, z.B. Motorstopp beim Stehen, -starten beim Anfahren,... (je nach Modell) hinzugekommen sind), aber die Vorgänge "unter der Haube" (Elektroantrieb, fossil, Hybrid,...) muss man nicht kennen.
 

Zurück
Oben