Interface Frage!

Status
Nicht offen für weitere Antworten.

l00P

Bekanntes Mitglied
Hallo zusammen!

Kann mir jemand erklären worin der Unterschied besteht ob ich in meiner Mainklasse direkt eine instanz einer anderen Klasse erstelle oder das über ein interface tue? Für mich sieht es so aus als wären Interfaces nur eine Last weil ich ja alle Methoden die in einenm Interface stehen auch überschreiben muß?? Also warum da der Weg über das Interface???

Offensichtlich fehlt mir da ein kleines Detail zum Verständnis :)
 

André Uhres

Top Contributor
Ein Interface ist ein Sprachmittel für den Entwurf.
Auf diese Weise kann man einen Datentyp schon vor der Implementierung festlegen und benutzen.
Er bleibt aber auch nach der Implementierung immer noch gültig und kann weiter verwendet werden.
Auf diese Weise bleibt die Schnittstelle stets unabhäging von der Implementierung,
von der es auch mehrere Varianten geben kann.

Eine Schnittstelle kann ausserdem von jeder beliebigen Klasse implementiert werden,
ohne daß die Schnittstelle in den Klassenbaum eigeordnet werden muss.
Das ist ein wichtiger Unterschied zu abstrakten Basisklassen.
 

dieta

Top Contributor
Wenn du eine Klasse hast (z.B. für einen Button), die eine oder mehrere Methode(n) aus einer dir unbekannten Klasse aufrufen soll, macht man das über interfaces: Du übergibst der Klasse, die die Methoden aufrufen soll, ein interface, dass diese Methoden enthält.

Ist jetzt vielleicht nicht so toll erklärt...
Mit Interfaces kannst du Methodenzeiger ersetzen.
 

l00P

Bekanntes Mitglied
aha und warum sollte ich von dieser dritten unbekannten Klasse nicht direkt eine Instanz erstellen und dessen Methode verwenden sondern eine Interface Methode überschreiben?? Das ist mir noch unklar?!?
 

André Uhres

Top Contributor
Damit dein Code unabhängig von der Implementierung bleibt.
Wenn du z.B. das Interface List gebrauchst, dann kann das ArrayList sein oder LinkedList oder sonst was.
Für deinen Code bleibt es stets eine List und du kannst später die Implementierung wechseln ohne deinen Code anpassen zu müssen.
 

Wildcard

Top Contributor
Ein weiterer Vorteil von Interfaces ist das es eine Pseudo-Mehrfachvererbung ohne deren Nachteile ermöglicht.
Ein Beispiel das in der Regel sofort einleuchtet ist das Comparable Interface.
Listen und Arrays können in Java automatisch sortiert werden solange alle darin enthaltenen Objekte das Comparable Interface implementieren.
Die Autoren der Java-API können deine Klassen nicht kennen.
Da man aber trotzdem einen Mechanismus zu Sortierung beliebiger Objekte anbieten möchte werden Interfaces verwendet.
Eine Klasse die also ein oder mehrere Interfaces Implementiert ist sowohl vom Typ FooBar, als auch vom Typ Interface1, Interface2,...
 

l00P

Bekanntes Mitglied
das leuchtet mir ein aber warum kann ich nicht gleich in meinem programm sowas schreiben:

Compareable comp = new Compareable();
comp.sort();

Kommt doch aufs gleiche oder??
 

AlArenal

Top Contributor
l00P hat gesagt.:
das leuchtet mir ein aber warum kann ich nicht gleich in meinem programm sowas schreiben:

Compareable comp = new Compareable();
comp.sort();

Kommt doch aufs gleiche oder??

Nein. Wenn du dir ne Klasse Leute schreibst und hast x Instanzen rumlungern, die du der Körpergröße nach sorteiren willst, wie kommst du dann an Comparable#sort wenn es keine Interfaces gibt?

Klar, du kannst "class Leute extends Comparable" machen, aber was wenn du auch noch eine Klasse "Fahrzeuge" hast und für ein Spiel willst du dass sich Fahrzeuge und Leute bewegen lassen? Dann wäre es doch ganz hübsch wenn Leute und Fahrzeuge eine Methode wie z.B. #move(int x, int y) hätten. Wenn du beide Klassen diese über ein Interface "Moveable" implementieren lässt, ist dir später egal was du da bewegst, so lange es ein Moveable ist.
 

l00P

Bekanntes Mitglied
Ah ich verstehe, in diesem Beispiel bräuchte ich also eine Superklasse von Leute und Fahrzeuge (Was ja schonmal keinen Sinn macht) und in dieser müßte ich dann move() implementieren. Interfaces ersetzen sozusagen die Mehrfachvererbung stimmt das so???

Denke jetzt hab ichs, hab nur zu minimalistisch gedacht :)

danke
 
S

SlaterB

Gast
> Ein Interface ist ein Sprachmittel für den Entwurf.
> Auf diese Weise kann man einen Datentyp schon vor der Implementierung festlegen und benutzen.
> Er bleibt aber auch nach der Implementierung immer noch gültg und kann weiter verwendet werden.

was spricht gegen eine Klasse mit leeren Operationen? (die kann man auch wirklich 'benutzen', ein Interface nicht instanziieren)
diese "Festlegung" kann doch genausogut in der Klasse statt im Interface beschrieben werden

ich sehe den Vorteil fast nur in der Mehrfachbenutzung
(ein Interface, mehrere unterschiedliche Implementierungen)
+ Mehrfachvererbung


in einem Spezialfall machts auch für nur eine Klasse Sinn:
lokales Interface für eine Klasse, deren package man nicht kennt/ nicht importieren will,
weil das z.B. weitere jars erfordern würde/ Probleme bei den Abhängigkeiten beim Kompilieren zwischen mehreren Projekten gäbe

und dann Stubs & Co. ;)
 

Wildcard

Top Contributor
SlaterB hat gesagt.:
was spricht gegen eine Klasse mit leeren Operationen? (die kann man auch wirklich 'benutzen', ein Interface nicht instanziieren)
diese "Festlegung" kann doch genausogut in der Klasse statt im Interface beschrieben werden
Ganz einfach:
Damit legst du eine Vererbungshierachie fest
 
S

SlaterB

Gast
was ist daran schlecht bzw. anders wenn man später eh diese Klasse verwendet?
 

AlArenal

Top Contributor
SlaterB hat gesagt.:
was ist daran schlecht bzw. anders wenn man später eh diese Klasse verwendet?

Weil du nicht alles sinnvoll über eine Hierarchie abdecken kannst, oder willst du jede Klasse von einem Superobjekt, das alles kann, ableiten?
 

Wildcard

Top Contributor
Du schränkst dich unnötig ein.
Ein Interface lässt einfach die Frage der Implementierung offen, Vererbung gibt die Richtung vor.
Wenn du Schnittstellen zu anderen Objekten festlegst (und damit meine ich nicht zwangsläufig ein Interface), dann willst du eine bestimmte Aufgabe erfüllt haben.
Warum zwingst du denjenigen der das später implementieren soll in eine Vererbungshierachie ohne davon einen Vorteil zu haben?
Vielleicht hat er schon genau die richtige Lösung in der Schublade die allerdings einer eigenen Vererbungshierarchie folgt.
 
S

SlaterB

Gast
noch mal von vorne, was ist die Vererbungshierarchie?
wer wird wann warum wie eingeschränkt?

Vererbung wird in einer leeren Klasse doch gar nicht benötigt (ist praktisch ein Interface) ;)
das einzig festgelegte ist der Klassenname anstelle des Interface-Names
 

AlArenal

Top Contributor
Was für eine leere Klasse? Ich weiß nicht was du so programmierst, aber leere Klasse kann ich nicht gebrauchen :p
 
S

SlaterB

Gast
ich meinte ja, dass man zum 'schnellen Anlegen der Schnittstelle bevor die Implementierung später kommt'
nicht das Java-Sprachmitttel Interface braucht,
statt
Code:
interface X {
  operation y();
}

// später kommt class Z implements X

geht auch direkt

Code:
class Z {
  operation y() {
  }
}

eine leere Klasse ist genauso schnell geschrieben wie das Interface,

wenn man das Interface nicht für 'richtige' Zwecke wie Mehrfachbenutzung braucht,
dann macht es als 'Sprachmittel für den Entwurf' meiner Meinung nach keinen Sinn,

vielleicht abstrakt gesprochen ein erster Programmierschritt,
aber das kann man mit einer leeren Klasse umsetzen, nicht mit einem Interface
 

Wildcard

Top Contributor
Du meinst also ein Klassen-Stub nicht als Schnittstelle zwischen Modulen, sondern als kompilierbares TODO?
 

AlArenal

Top Contributor
Und wenn dann ein Honk doch was reinschreibt und damit eine Implementierung vornimmt? Und wie soll man bei der Definition einer Klasse durchblicken, die dann scheinbar mehrere Klassen erweitert, man aber nicht direkt erkennen kann, welche davon leer sind und welche nicht?
 
S

SlaterB

Gast
und wenn man ein Interface hat und ein Honk die Implementierung dazu halb schreibt?
das Argument verstehe ich nicht ;)

eine Klasse ist eh immer in Bearbeitung oder per CVS oder so geschützt,
ist das jetzt auch noch ne Aufgabe von Interface?

> man aber nicht direkt erkennen kann, welche davon leer sind und welche nicht?

man wird doch mal da reinschauen können/ einen Zuständigen haben usw.,
wenn eine Klasse mehrere Interfaces implementiert und für das erste Interface der Code geschrieben wird,
hat man dann nicht das gleiche Problem?

-----

> Du meinst also ein Klassen-Stub nicht als Schnittstelle zwischen Modulen, sondern als kompilierbares TODO?

dieses Technik-BlahBlah.., keine Ahnung ;)

edit: ok, macht Sinn, ja das meine ich
 

Leroy42

Top Contributor
Was ich an dieser Diskussion bisher vermisse,
ist das Argument: Information Hiding.

Eine Klasse die Objekte verwaltet die irgendetwas
bestimmtes können(eine Methode bereitstellen),
muß und sollte über diese Objekte nur so viel wissen,
wie es sie angeht.

Eine Klasse die z.B. Objekte verwaltet die vergrößert
werden können, geht es überhaupt nichts an und braucht
auch nicht zu wissen ob es sich bei den Objekten um Fahrzeuge,
Landkarten, tibetanische Mönche oder was auch immer handelt.
Für sie ist einzig und allein wichtig, daß sie die Objekte veranlassen
kann, sich zu vergrößern.

Code:
interface Vergrößerbar {
  public void setInitialSize();
  public void zoom(int percent);
}

Aus Sicht dieser Klasse sind alle von ihr verwalteten
Objekte eben nur vom Typ Vergrößerbar und
es können auch nur die beiden Methoden auf sie
angewandt werden.
 

AlArenal

Top Contributor
Ich glaube Slater redet allein vom Vorgang der Programmierung durch den Programmierer. Wir reden Stilmitteln der Software-Architektur. So ganz verstehe ich aber ehrlich gesagt noch nicht wo genau sein Problem liegt...
 
S

SlaterB

Gast
jo, mich störte
> Ein Interface ist ein Sprachmittel für den Entwurf.
> Auf diese Weise kann man einen Datentyp schon vor der Implementierung festlegen und benutzen.
wie anfangs ja von mir schon geschrieben

nur für ein "leeres etwas" sehe ich keinen Grund für ein Interface
 

AlArenal

Top Contributor
Ein Interface ist aber nicht nur ein "leeres Etwas". Es ist die Vorlage einer Struktur, die beliebig von Klassen verwendet werden kann um die dadurch ausgedrückte Funktionlität zu implementieren.

Wenn du in ein Restaurant gehst ist dir auch klar, dass du auf immer dieselbe Art und Weise diene Bestellung abgeben kannst, egal ob Fritten-Ranch oder Sterne-Tempel. Ob der Koch das Gammelfleisch in der Mikrowelle auftaut, oder dem Schwein noch flott selbst die Kehle durchschneidet, kann dir dafür völlig egal sein. Das Interface sagt gibt vor, dass du nach Bestellung des Gerichts dein Essen bekommst. That's it.
 
S

SlaterB

Gast
tralala, ich habe doch darauf hingewiesen, wie sehr ich Interface für ANDERE Dinge wie Mehrfachbenutzung schätze,
ich diskutiere nur darüber, dies für genau EINE Klasse zu verwenden,

also ein Interface Fritten-Ranch aus dem nachher eine Klasse Fritten-Ranch wird (braucht sogar noch einen zweiten Namen)
das erscheint mir sinnlos, da reicht auch eine leere Klasse damit 'schonmal was da ist'
 

AlArenal

Top Contributor
Aber wenn du weißt, dass noch die 5-Sterne-Fresstempel- und die Dönermann-Klasse kommt... :D

So lange das nicht abzusehen brauchen wir nicht diskutieren, denn so lange isses wirklich witzlos. Da kann man später noch immer refactoren (sp?).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
pg1337 Interface-Frage Allgemeine Java-Themen 24
B Frage zu Interface und List Allgemeine Java-Themen 4
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
S Frage zu Interface Allgemeine Java-Themen 7
S Simple User Interface Frage Allgemeine Java-Themen 13
G Interface Frage Allgemeine Java-Themen 4
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
C Schnittstellen(interface) Allgemeine Java-Themen 9
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
F Ein interface und private Methoden? Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben