Sinn von Interfaces

Status
Nicht offen für weitere Antworten.

KaaNo

Mitglied
Hi Leute!

Ich beschäftige mich mit der Sprache JAVA und beherrsche diese mittlerweile auch sehr gut. Jedoch sind einige Fragen offen geblieben und vorallem die der Interfaces. Könnt ihr mir vielleicht den Sinn und Zweck dieser sagen?

Ein Interface in Java sieht ja so aus, dass ich vor die Klasse einfach interface schreibe und die Methoden in dieser Klasse alle rumpflos sind. Beispiel:

Code:
interface Movable
{
  boolean start ();
  void stop ();
  boolean turn (int degrees);
}

So nun zum für mich komischen Teil. Wird einer Klasse nun ein Interface implementiert geschieht das per anhängen von implements Movable (auch mehrere möglich). Beispiel:

Code:
class Bike implements Movable
{
  public boolean start () {...}
  // Implementierung von stop und turn sowie weiterer Methoden
  ...
}

Das wäre die ganze Implementierung. Was ich nun irgendwie sinnlos finde ist, dass die Methoden start, stop etc. sowieso in der Klasse mit Rumpf geschrieben werden muss, so dass es eine Funktion bekommt also ist für mich irgendwie das ganze Interface ohne echten Nutzen. Dient das ganze nur der besseren Lesbarkeit des Codes oder warum das ganze? Denn nun werden Objekte ja wie folgt erstellt:

Code:
Movable vehicle
...
vehicle = new Bike ();
...
vehicle.turn(20;...

Weiteres Beispiel:

Code:
void drive (Movable vehicle, Coordinate from, Coordinate to)
{
  vehicle.start ();
  vehicle.turn (45);
  vehicle.stop ();
}

Danke schonmal für Antworten!
 

Isaac

Bekanntes Mitglied
Interfaces sind nützlich wenn du übergeordnete Arbeit deligieren willst. Als gutes Beispiel hat sich hier Collections.sort bewährt.

Stell dir vor du willst etas sortieren, Bauklötze nach ihrer Farbe, Tische nach ihrer Höhe. Personen nach ihrem alter. Mitglieder nach ihrem Eintrittsdatum usw usw.

Der Clou am Interface ist, das es total egal ist nach was du sortieren willst. Wenn du also eine Klasse Bauklotz, Tisch, Person oder Mitglied hast implementierst du das Interface Comparable und kannst dann über Collections.sort deinen Vector of Bauklötze, Tische, Personen oder Mitglieder sortieren und zwar nach den Kriterien die du in den Methoden festgelegt hast, die das Comparable interface vorschreiben.
 

Sky

Top Contributor
Nicht nur zum Sortieren sind die Interfaces gut. Immer genau dann, wenn mehrere Klassen die gleiche Schnittstelle nach aussen haben müssen, bieten sich Interfaces gerade zu an!

Dein Beispiel hat es doch selbst verdeutlicht:

Jede Klasse, welche dein Interface implementiert hat z.B. die Methoden start() und stop(). Nun ist es völlig egal, ob Du ein Fahrrad, ein Motorrad, ein Auto oder ein Boot hast; durch die allgemeine Schnittstelle kann man von jedem Objekt diese Methoden aufrufen, und das obwohl sie intern wahrscheinlich immer ein wenig anders agieren.

Grüsse Sky
 

AlArenal

Top Contributor
Ich habe z.B. eine visuelle Anwendung, ähnlich ABC/Micrografx Flowcharter oder MS Visio entwickelt und jedes von den grafischen Symbolen ist eine eigene Klasse. Alle definieren aber beispielsweise ein Interface, mit dessen Methoden sich diese Klassen in XML (de-)serialisieren, zwecks Speichern und Laden.

Außerdem, aber soweit bist du vermutlich noch nicht, machts mir erst das möglich vernünftig mittels Reflection auf allen Objekten eines Dokuments zu arbeiten. "Du implementierst Interface XYZ? Aha, dann dann muss ich nun diese Methode von dir aufrufen..." Wenn ich das alles mit if (x instanceof y) machen würde, würde ich ja rattendolle werden...
 

Bleiglanz

Gesperrter Benutzer
Ich beschäftige mich mit der Sprache JAVA und beherrsche diese mittlerweile auch sehr gut. Jedoch sind einige Fragen offen geblieben und vorallem die der Interfaces. Könnt ihr mir vielleicht den Sinn und Zweck dieser sagen?
Wer so eine Frage stellt kann nicht von sich behaupten er beherrsche Java "sehr gut" :)
Was ich nun irgendwie sinnlos finde ist, dass die Methoden start, stop etc. sowieso in der Klasse mit Rumpf geschrieben werden muss, so dass es eine Funktion bekommt also ist für mich irgendwie das ganze Interface ohne echten Nutzen
Denk mal drüber nach! Wenn du innerhalb deines riesigen Projekts eine Methode hast, die so aussieht
Code:
public Movable getMover()
{
     // hier irgendwas
     SuperMover mover = new SuperMover()
     return mover;
}
dann können die Clients ganz normal mit Movable programmieren, so als ob das eine Klasse wäre. Wenn aber irgendwann ein SuperDuperMover() auf den Markt kommt, dann kannst du den ganz einfach einbauen OHNE dass die Klassen, die getMover() aufrufen neu übersetzt werden müssen!

oder

in getMover entscheidest du in einem if(), welche Implementierung für Movable du zurückgibst (flexibilität)

oder

du hast ein Array oder eine Collection von verschiedenen Movables: ohne Interfaces müsstest du beim Iterieren jede Instanz in ihren eigenen Typ casten - das wäre ein Alptraum

denk mal über folgenden Tipp nach:

Schreibe immer
Code:
List l = new ArrayList();
anstatt
Code:
ArrayList l = new ArrayList();
 

KaaNo

Mitglied
Aber was wäre so falsch dran, dass genau so zu machen? Im Prinzip ist die ganze Interface Geschichte doch nichts anderes als es der Lesbarkeit dienen zu lassen. Weil so ein krasses Beispiel hab ich bis jetzt noch nicht gesehn, dass mich überzeugt oder einfach ebend den Sinn veranschaulicht. Aber wahrscheinlich bin ich im Moment nur zu blöd das zu kapieren und sollte mir einige komplexere Beispiele anschauen, wenn nicht mal zwei gute Freunde mir das privat erklären konnten.
 

Sky

Top Contributor
Also, dass ganze hat nichts mit Blöd zu tun. Ich benutze Interfaces in einem konkreten Fall, wo ich Daten nachladen muss. Das Nachladen der Daten geschieht immer auf die gleiche Weise nur, je nachdem, wer (im Sinne von Klasse) die Daten lädt soll automatisch ein nach dem Laden etwas anderes passieren.

Meine Lösung war ein Interface:

Code:
public Interface Loadable {
 public void dataLoaded();
}

eine Klasse zum Laden:

Code:
public class DatenLaden {
.
.
.
public DatenLaden( Loadable l ) {
   ...
}

public void laden() {
   l.dataLoaded(); // hier findet nun automatisch die Nachbehandlung statt
}
.
.
.
}

und dann Klassen, die das Interface implementiert haben:

Code:
...
... new DatenLaden( this );
...laden();
...

So ist sichergestellt dass nach jedem Laden das richtige geschieht, egal, wer wann die Daten nachlädt.

Das Beispiel ist vielleicht noch ein wenig abstrakt, verdeutlicht aber hoffentlich den Sinn!?
 

Isaac

Bekanntes Mitglied
Btw Graz Illuvatar *g* Nun haben wir gleich 2 Ligen, die 14 und die 15 Jahre Liga *Illuvatar einen binären Kuchen reich*

@Thread
Natürlich kann man alles, was man mit Interfaces macht auch ohne sie machen grac. Aber das schöne ist eben das man sich keine Gedanken mehr machen muss. Wie das sort Beispiel oben zeigt musst du kein Quicksort oder bubblesort mehr selber implementieren. In dem Moment wo du das Interface compareable implementierst und nur die Regeln aufstellst wie sortiert werden soll ist die Sache für den Programmierer schon erledigt da das Sortieren eben die Methode sort übernimmt die sich auf die Interfacemethoden abstüzt.

Wann immer du etwas sortieren willst implementierst du das interface compareable und bist fertig. Also wenn das kein Vorteil ist *g*
 

Bleiglanz

Gesperrter Benutzer
Ein anderes Beispiel sind die "leeren APIs" von Sun - z.B. für JNDI, JDBC, Servlets, XML (JAXP) usw.

Von Sun wird da nur ein Haufen Interfaces vorgegeben, die dann von Herstellern ("Providern") implemetiert werden und über einen dynamischen Mechanismus ("Factorys") in eine konkrete Anwendung eingabaut werden

=> nur indem du vollständig gegen Interfaces programmierst kannst du z.B. eine Webanwendung schreiben, die dann ohne Probleme im Tomcat-Server, im Jetty-Server oder in Weblogic laufen kann
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
C Sinn eines Interfaces? Java Basics - Anfänger-Themen 4
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
B Sinn von Lambdas? Java Basics - Anfänger-Themen 16
5 Welchen Sinn hat ein Runnable Java Basics - Anfänger-Themen 6
P OOP Sinn von abstrakten Klassen Java Basics - Anfänger-Themen 2
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
B Der Sinn von Arrays Java Basics - Anfänger-Themen 2
Q Container sinn? Java Basics - Anfänger-Themen 3
S string index out of range - es ergibt keinen Sinn Java Basics - Anfänger-Themen 6
J Sinn/Nutzen von Scanner Java Basics - Anfänger-Themen 23
B Sinn von Reflections Java Basics - Anfänger-Themen 10
H Vererbung Prinzip der Ersetzbarkeit-Sinn? Java Basics - Anfänger-Themen 9
F Sinn der SuppressWarnings("unused")-Annotation Java Basics - Anfänger-Themen 5
R Sinn des programmes Java Basics - Anfänger-Themen 10
W Sinn von Konstruktorsyntax und finalize Java Basics - Anfänger-Themen 14
J Worin besteht der Sinn und Anwendungsbereich von Dreidimensionalen Arrays? Java Basics - Anfänger-Themen 11
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
T Sinn von finally? Java Basics - Anfänger-Themen 3
M Variablen Zinseszinsberechnung - Variable ergibt keinen Sinn Java Basics - Anfänger-Themen 15
A Klassen Sinn des Konstruktors Java Basics - Anfänger-Themen 12
P Sinn des Security Managers Java Basics - Anfänger-Themen 2
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Sinn von Jar Dateien Java Basics - Anfänger-Themen 5
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
hdi Sinn von RuntimeExceptions? Java Basics - Anfänger-Themen 90
Developer_X NullPointer Exception ohne Sinn Java Basics - Anfänger-Themen 19
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
M Variable überwachen und Sinn eines Threads Java Basics - Anfänger-Themen 7
G Sinn vo OOP Java Basics - Anfänger-Themen 5
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
G sinn von JList Java Basics - Anfänger-Themen 6
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Wozu dient Interfaces? Java Basics - Anfänger-Themen 6
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
I XML und Interfaces aus anderen Projekten Java Basics - Anfänger-Themen 3
8u3631984 Record - Interfaces Java Basics - Anfänger-Themen 4
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
B JaxB und Interfaces? Java Basics - Anfänger-Themen 2
M Funktionale Interfaces Java Basics - Anfänger-Themen 3
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Zweck von Interfaces immer noch nicht klar Java Basics - Anfänger-Themen 3
M Klasse erbt von Interfaces Java Basics - Anfänger-Themen 6
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
H Polymorphie Interfaces und statischer Typ Java Basics - Anfänger-Themen 33
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Interface Warum Interfaces? Java Basics - Anfänger-Themen 5
R interfaces Java Basics - Anfänger-Themen 1
B Interfaces Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
J Interfaces? Java Basics - Anfänger-Themen 32
M Erstellung Interfaces....totale Anfängerfrage Java Basics - Anfänger-Themen 16
S Erste Schritte Innere Klassen und Interfaces Java Basics - Anfänger-Themen 2
J Wofür dienen Interfaces ? Java Basics - Anfänger-Themen 1
Hijo2006 Frage zu Interfaces Java Basics - Anfänger-Themen 21
Hacer Interfaces implementieren Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
L Via Interfaces unterschiedliche Klassen ansprechen Java Basics - Anfänger-Themen 8
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
J Interfaces Java Basics - Anfänger-Themen 15
D Frage bzgl. Interfaces Java Basics - Anfänger-Themen 10
D Interface Verständnisprobleme von Interfaces Java Basics - Anfänger-Themen 5
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
S Rollen verändern, Interfaces austauschen wie? Java Basics - Anfänger-Themen 10
K Interfaces/Klassen etc. Java Basics - Anfänger-Themen 6
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
O Java Interfaces für andere Programmiersprachen zur Verfuegung stellen? Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
G Instanzen eines Interfaces erzeugen Java Basics - Anfänger-Themen 7
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
F Best Practice UML/Planung eines Projektes (Klassen, Interfaces, ...) Java Basics - Anfänger-Themen 0
V Vererbung Vererbung, Interfaces und OOP... Java Basics - Anfänger-Themen 10
A Interface Poymorphismus bei Interfaces Java Basics - Anfänger-Themen 2
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
D Interfaces und allgemeingültige Methodenaufrufe Java Basics - Anfänger-Themen 6
H Erste Schritte 2 User Interfaces für eine Anwendung Java Basics - Anfänger-Themen 7
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
M Interface @Inject mit Interfaces? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben