Interfaces (Schnittstellen in Java)

Hier kann über alles diskutiert werden, wirklich alles. Betonung liegt auf "diskutiert", das ist also kein Freischein zum Spammen.
(Beitragszähler deaktiviert)
Antworten
Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2864
Registriert: 5. Okt 2008, 21:27

Interfaces (Schnittstellen in Java)

Beitrag von Blue.Shark » 18. Jan 2012, 22:13

Hallo,

Kann mir mal jemand erklären, zu was Interfaces gut sind? Ich versteh den Sinn überhaupt nicht.
Denn wenn ich z.B eine Klasse habe, die die Methoden der andere Klasse nutzen will, kann ich sie einfach mit "import" bekannt machen oder noch einfacher beide in ein Paket rein tun. (Oder Vererben)
Zudem sind Interfaces sehr kompliziert.
Aus diesen Gründen wollte ich mal fragen für was die überhaupt da sind.
Danke,
Gruß Blue.Shark
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Luis
Feuerwolf
Beiträge: 75
Registriert: 5. Nov 2006, 10:04

Re: Interfaces (Schnittstellen in Java)

Beitrag von Luis » 19. Jan 2012, 00:58

Man will zwar oft die gleiche Methode benutzen, aber in ihrer Ausführung können sie manchmal ganz verschieden sein.
Nehmen wir als Beispiel ein Interface für Geometrische Objekte und man will Methoden zur Flächenberechnung und Umfangberechnung zur Verfügung stellen. Nun bekommen unsere Klassen Dreieck und Kreis dieses Interface und wir müssen jeweil die richtigen Berechnungen implementieren.

Soweit so gut, bis dahin könnte man auch ohne Interfaces auskommen. Jetzt kommt aber das Stichwort dynamisches Binden, wenn wir als Objekttyp das Interface benutzen können wir unsere Klassen(die das Interface enthalten) zur Objekterzeugung benutzen und es werden trotzdem die richtigen Methoden aufgerufen.

Ein Beispiel:
Item neuesItem; //Item ist ein Interface, das Methode "anwenden" bereit stellt

neuesItem = new Spiegel_der_Maha(); //Klasse Sp._d._Maha enthält Interface
neuesItem.anwenden(); //Ruft das Kaufmenü der Maha auf

neuesItem = new blauerHeilzauber(); //Klasse bl.Heili enthält Interface
neuesItem.anwenden(); // heilt anwender vollständig

Du siehst zunächst wurde das Item als Spiegel der Maha erzeugt und funktioniert auch wie dieser, danach wurde das gleiche Objekt als blauerHeilzauber erzeugt und funktioniert auch wie ein Heilzauber.
Ohne Interface hättest du 2 verschiedene Objekttypen aus den jeweiligen Klassen erzeugen müssen, oder erstmal abfragen müssen welches Objekt gerade vorliegt.

Luis
Feuerwolf
Beiträge: 75
Registriert: 5. Nov 2006, 10:04

Re: Interfaces (Schnittstellen in Java)

Beitrag von Luis » 19. Jan 2012, 12:46

Der Unterschied zwischen abtract class und Interface ist das man im Interface wirklich nur Methoden bereit stellt, während in einer abstrakten Klasse auch Variablen bereit gestellt werden. Durch diesen Unterschied sind Interfaces sogar noch ein wenig abstrakter als abstract classes. Und je abstrakter etwas ist desto wiederverwendbarer ist es auch. Ein Beispiel in Java sind die ganzen Listener (ActionListener, MouseListener usw.). Man kann eine ganze Reihe von Objekten mit diesen Listener versehen, ohne das diese Objekte etwas miteinander zu tun haben müssen. Das Beispiel mit den Items ist in diesen Fall schlecht, da ist Vererbung die bessere Variante, weil z.B. jedes Item einen String mit der Beschreibung hat und wir durch vererben nochmal in anwendbare und nicht anwendbare differenzieren könnten und der Polymorphismus genau so gut funktionieren würde wie das dynamisches Binden. Aber nehmen wir an wir haben einen PositionListener, der immer aufgerufen wird, falls wir auf einen Feld mit einen Objekt stehen, das diesen Listener enthält. Mit einen Interface können wir diesen Effekt auf verschiedenen Typen übertragen z.B: Npcs, Items(Fallen), das Feld selbst.
Das ginge zwar auch wieder mit Vererbung, aber versuch mal das ganze schön und übersichtlich zu modellieren, dazu müssten Npcs und Items von der selben Klasse abgeleitet werden und das ist vom Modell her doch recht unschön.
Und in Java haben wir auch noch den Fall, dass es nur einfache Vererbung gibt, Interfaces kann man aber beliebig viele einbinden.
ob ich jetzt ein new Item mach oder new Spiegel..wo is der unterschied?sobald das objekt erzeugt wird weiß ich ja von welchem typ es sein muss (kack starke typisierung in java -.-)
Der Unterschied ist, dass es 2 verschiedene Typen sind, die anders bearbeitet werden müssen.
Zuletzt geändert von Luis am 21. Jan 2012, 01:24, insgesamt 1-mal geändert.

Benutzeravatar
Blue.Shark
großer Laubbär
Beiträge: 2864
Registriert: 5. Okt 2008, 21:27

Re: Interfaces (Schnittstellen in Java)

Beitrag von Blue.Shark » 20. Jan 2012, 18:55

Luis hat geschrieben:
Ein Beispiel:
Item neuesItem; //Item ist ein Interface, das Methode "anwenden" bereit stellt

neuesItem = new Spiegel_der_Maha(); //Klasse Sp._d._Maha enthält Interface
neuesItem.anwenden(); //Ruft das Kaufmenü der Maha auf

neuesItem = new blauerHeilzauber(); //Klasse bl.Heili enthält Interface
neuesItem.anwenden(); // heilt anwender vollständig

Du siehst zunächst wurde das Item als Spiegel der Maha erzeugt und funktioniert auch wie dieser, danach wurde das gleiche Objekt als blauerHeilzauber erzeugt und funktioniert auch wie ein Heilzauber.
Ohne Interface hättest du 2 verschiedene Objekttypen aus den jeweiligen Klassen erzeugen müssen, oder erstmal abfragen müssen welches Objekt gerade vorliegt.
Erstmal danke für die Antwort.
Zu deinem Beispiel, das ich gerade zitiert habe:
Meine Erste Frage: Wie kann denn das gehen: "Item neuesItem = new Spiegel_der_Maha()"? Ich habe gedacht das geht nur z.B. so: Item neuesItem = new Item() oder z.B. JFrame q = new JFrame(). Ist das eine Eigenschaft vom Interface dass das so geht: "Item neuesItem = new Spiegel_der_Maha()" ?

Dann meine Zweite Frage: Dann wäre das Interface ja völlig gleichbedeutend zu das hier: Ich mache eine Klasse (Item) mit der Methode "anwenden". Jetzt mach ich eine Klasse Spiegel_der_Maha und die Klasse blauerHeilzauber, welche beide von der Klasse Item erben. So können sie die Methode von "Item" holen und überschreiben (genauso wie das z.B. mit der toString-Methode geht)

Und es ist doch auch so, dass wenn ich z.b. 2 verschiedene Klassen mache und die haben die selben Methodennamen , dass die sich doch dann garnicht gegenseitig sören?

EDIT: Zu meiner zweiten Frage: Ich hab völlig vergessen gehabt das du die schon bereits beantwortet hast^^
Macht alle bei meinem Spiel mit -> Wörter raten
Meine aktuelle User-Idee: Errungenschaften auf Zeit
Meine Wunsch-Idee: Das Haus der Statistiken, Liebligskarte: Etume - das Flusstal. Andere Userideen: Zauber der globalen Wunder

Luis
Feuerwolf
Beiträge: 75
Registriert: 5. Nov 2006, 10:04

Re: Interfaces (Schnittstellen in Java)

Beitrag von Luis » 21. Jan 2012, 01:27

1) Interessiert es dich wirklich wie das ganze genau abläuft? Es funktioniert fast genauso wie mit dem erben. Du kannst jede Unterklasse einer Klasse ja auch zum erzeugen der Oberklasse benutzen. Ein Interface "erwartet" ja eigentlich nur, dass bestimmte Methoden vorhanden sein müssen. Durch das Einbinden des Interfaces bist du dazu "gezwungen" diese Methoden zur verfügung zu stellen.

2)Es wäre nicht komplett gleichbedeutend, intern wird es (ein wenig) anders realisiert (aber wie oben schon gesagt fast genauso). Aber ja die Wirkung wäre wirklich gleich. Beim Polymorphismus kannst du mit den gleichen Code Objekte verschiedener Typen bearbeiten. Beim dynamischen Binden hat der gleiche Code je nach Objekt verschiedene Effekte. Wichtig ist nur, dass der gleiche Code (z.B. der Aufruf einer Methode) in seinen Effekt variieren kann.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste