Wie arbeitet man mit Interfaces

Status
Nicht offen für weitere Antworten.

michael p

Mitglied
Hallo Leute,


Ich muss fürs Studium einen kleinen Aktienticker zusammenbasteln.
Da ich das polymorph lösen wollte, habe ich mir ein Interface geschrieben.
Die Klasse Aktie implementiert das Interface Handelbar. In der Klasse Aktienticker
nehmen die Methoden nur Parameter vom Typ Handelbar an.
Dadurch wird das Interface bei mir sehr groß, da ich alle Methoden
der Klasse Aktie vorher im Interface definieren musste.

Kann ich das irgendwie anders lösen, also
das das Interface nicht mehr alle Methoden von Aktie vordefinieren muss.
Die Methoden in Aktienticker sollen den Parameter aber nicht casten um von Handelbar auf Aktie zu kommen.

also nicht soetwas z.B.:


Code:
public void hinzufügen(Handelbar h){

Aktie a=(Aktie)h;

}

Hoffe jemand hat verstanden, was ich meine und kann mir helfen
 

Marco13

Top Contributor
Die Richtung ist eigentlich umgekehrt: Man definiert die minimale Menge von Methoden, die etwas anbieten muss, um "Handelbar" zu sein. Und die implementiert man dann in "Aktie". Man sollte aber nicht alles, was eine Aktie so von sich aus an Methoden anbietet in ein Interface packen (warum auch immer man das tun sollte).

Um das implementieren der Methoden ommt man nicht drumrum. Man könnte evtl. eine Abstrakte Klasse anbieten, die für alle Methoden "Default"-Implementierungen anbietet, aber ... welche (bzw. wie viele) Methoden sind denn in diesem Interface?
 
G

Gast

Gast
Mach vllt. noch eine Implementierung von Handelbar für Gold, Fonds, Optionsscheine etc.
Dann wird dir vllt. klarer was dein Interface bedeutet.
 

michael p

Mitglied
In dem Interface sind alle getter und setter, die Aktie braucht um alle ihre Instanzvariablen zu
initialisieren. Wenn jetzt aber noch soetwas wie Optionen und Zertifikate dazu kommen wird Handelbar ja noch dicker.


Hier z.B. die Ausgabefunktion

Code:
public void ausgabe(ArrayList<Handelbar> handel){
		
		for(Handelbar h:handel){
			
			System.out.println(h.getFirma());
			System.out.println(h.getAnzahl());
			System.out.println(String.format("%,.2f Euro", h.getPreis()));
			System.out.println(h.getDatum().getTime());
		}

Wenn Handelbar h die Methode getFirma() nicht kennt, kann sie nicht auf sie zugreifen.
Außerdem muss ich auch viele unwichtige Methoden ins Interface packen. Z.B. eine getter- und setter-Methode in der
einfach nur definiert wird das Einzahl von Aktie "Aktie" und Mehrzahl Aktien ist. Die brauch ich z.B.
für die Eingabe:
Code:
"Anzahl der "+handel.getMehrzahl()+" eingeben          : "
.


Um das implementieren der Methoden ommt man nicht drumrum. Man könnte evtl. eine Abstrakte Klasse anbieten, die für alle Methoden "Default"-Implementierungen anbietet, aber ... welche (bzw. wie viele) Methoden sind denn in diesem Interface?

Die Implementierungen sind schon ganz ok. Ob das jetzt in einer abstrakten Klasse oder in einem Interface steht
macht ja keinen wirklichen Unterschied.

Ich dachte dabei eher an getClass(), also dass dann stehen würde h.getClass().getFirma() und dass
die JVM dann erkennen würde, dass h in Wirklichkeit Aktie ist.

Funktioniert aber leider nicht.

Code:
 
S

SlaterB

Gast
wenn du die Operation getFirma() brauchst, und diese nur in Aktie drin ist,
nicht aber in anderen Handelbaren, dann bringt dir das Interface nichts, dann schreibe gleich Aktie als Parameter,

ganz anders siehts aus, wenn jede Handelbar-Klasse eine toString() Operation implementiert
und sich die ausgabe(ArrayList<Handelbar> handel)-Operation nur darum kümmert,
diese Einzelstrings zusammenzufassen und in die Ausgabe, in eine Datei oder ins Internet zu schreiben,

eine solche Ausgabe einer Liste beliebiger Handelbar-Objekte wäre ohne Interfaces nur schwer möglich, hier liegt ein echter Mehrwert vor
 

Marco13

Top Contributor
Also... das "getMehrzahl" sieht schon ziemlich seltsam aus. Da könnte man schon drüber nachdenken, sowas zu machen wie
"Anzahl der Anteile "+handelbar+" eingeben : "

Wenn du nicht sagen willst, welche Methoden in diesem Interface schon stehen, kann man kaum noch was dazu sagen. Außer, ganz allgemein: Das interface sollte imho im so schmal wie möglich sein.
 

michael p

Mitglied
naja es stehen die getter und setter zu Firma(Name der Firma),Anzahl,Preis pro Aktie und Datum

also

getFirma();
setFirma();
getAnzahl();
setAnzahl();
getPreis();
setPreis();
getDatum();
setDatum();

wäre das schon zu viel?
 
S

SlaterB

Gast
jede Operation macht genau dann Sinn, wenn sie in allen implementierenden Klassen auch enthalten ist (und nicht etwa dummy-mäßig ergänzt wird)

je mehr Operationen, desto weniger Klassen kommen vielleicht in Frage, aber das ist kein Problem der Operationen an sich,

fange globaler an: überlege, welche Klassen logisch zu einem Interface zusammenzufassen sind, welche gleich behandelt werden sollen,
und warum, von welchen Standpunkt aus gesehen das Interface benutzt wird

daraus ergeben sich automatisch die möglichen Operationen,
deren Anzahl ist letztlich egal bzw. wird automatisch aus dem Zweck abgeleitet
 

jPat

Bekanntes Mitglied
Falls in jeder Klasse eine Firma, eine Anzahl, ein Preis, ein Datum enthalten ist, dann nehm doch eine abstrakte Klasse.

Dein Interface Kannst du dir dan immer noch dazuschreiben...
 
M

maki

Gast
Die Implementierungen sind schon ganz ok. Ob das jetzt in einer abstrakten Klasse oder in einem Interface steht
macht ja keinen wirklichen Unterschied.
Doch, es gibt einen Riesenunterschied, ob man eine abstrakte Klasse oder ein Interface benutzt.

Bei Interfaces gibt es Mehrfachvererbung, bei Klassen (auch abstrakten) nicht.

Mit einer Basisklasse drückt man eine sehr starke Beziehung aus: "Ist ein"
Mit einem Interface dagegen ist die Beziehung lockerer, man fügt nur zusätzliche Funktionalität bei.

Man sollte sich genau überlegen, welches der beiden eingesetzt wird, da (abstrakte) Basis Klassen nunmal sehr einschränkend sind.
 

jPat

Bekanntes Mitglied
:idea: für die Ausgabe:
Also ein Interface nur für die getter ....
Code:
public <T extends GetterInterface> void ausgabe(ArrayList<T> handel){
 for (T k:handel){
  System.println(k.getDatum());
   ...
  }
}
Nun Kannst du dein Getter Interface in die Aktien, optionen ... implementieren und alle ausgeben, ohne dich festzulegen.

Die Setter würde ich in die Klassen direkt einfügen, Da man evtl über den Konstruktor schon einige Unveränderbare Informationen hat (z.b. Name der Firma).
 

Marco13

Top Contributor
Damit das nicht falsch interpretiert wird: Ich hatte erwähnt, dass du evtl. eine abstrakte Klasse verwenden kannst, wenn die Implementierung des Interfaces "meistens" gleich ist. Das interface sollte man nach wie vor beibehalten! Aber wenn es für das Interface "Handelbar" eben 10 Implementierungen geben kann, die nur inhaltsarme setter/getter haben, kann man die von einer abstrakten Klasse erben lassen, die diese Trivialmethoden implementiert. Und wenn sie später mal noch von etwas anderem erben müssen, kann man immernoch das "extends" wegmachen, und die Methoden dann halt von Hand implementieren. Es wird ja überall nur davon ausgegeangen, dass sie das interface implementieren - und NICHT, dass sie von der abstrakten Klasse erben, die eine Triavialimplementierung des Interfaces anbietet.

Ähnlich wie die Sache mit MouseListener und MouseAdapter. Ihr wißt schon :roll:

Aber ... muss alles, was "Handlebar" ist, auch eine "Firma" haben? Wie ist das bei Gold? Einige der set-Methoden "fühlen sich komisch an". Soll die Firma wirklich über das Interface geändert werden können? Vermutlich sollte sie im Konstruktor der jeweiligen Implementierungen gesetzt, und dann nurnoch gelesen werden können....?! Soll man den Preis von außen festelgen können? (Wäre geil, wenn man das bei Aktien könnte :cool: )... Naja. Das sind wohl eher Architekturfragen, die man so "von außen" nicht beantworten kann.....
 
M

maki

Gast
Damit das nicht falsch interpretiert wird:
Falls das an mich gerichtet war (falls nicht, tschuldigung das ich mich aufdränge ;) ), ich fand deine Aussage diesbezüglich sehr eindeutig und stimme ihr voll zu:
Um das implementieren der Methoden ommt man nicht drumrum. Man könnte evtl. eine Abstrakte Klasse anbieten, die für alle Methoden "Default"-Implementierungen anbietet, aber ... welche (bzw. wie viele) Methoden sind denn in diesem Interface?
Wollte michael_p nur erklären, dass es nicht egal ist, ob Interface oder abstrakte Klasse.
Interface + abstrakte Klasse mit Defaultimplementierung ist natürlich sehr angenehm und gleichzeitig flexibel.

Collections sind übrigens so aufgebaut.
 

michael p

Mitglied
Danke für die vielen Antworten

tschuldigung, dass ich so lange nicht geantwortet habe.




Hab jetzt meinen Prof gefragt, der meinte, dass hier tatsächlich
eher eine abstrakte Klasse passt, da sich die Implementierungen der Methoden
von Klasse zu Klasse kaum bzw. gar nicht unterscheiden. Zudem
funktioniert der ist-ein -Test und ich brauch keine Mehrfachvererbung.

Also hab ich aus dem Interface eine abstrakte Klasse gemacht.

Das was ich aber jetzt überhaupt nicht verstehe ist, wieso
dann das Interface Serializable funktioniert, obwohl überhaupt keine Methoden
drinne sind.
 
S

SlaterB

Gast
für Serializable braucht man keine Operationen,
das Interface selber ist alle Information die ausgedrückt werden soll,

das ist eine Markierung, die nur verspricht, dass das Objekt serialisiert werden kann,
groß prüfen kann man es nicht, wenn es nicht hinhaut, gibts ne Exception,
aber ist eine Art Selbstkontrolle
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
A Frage zu einer Methode - Panel arbeitet nicht ordnungsgemäß Java Basics - Anfänger-Themen 2
F Erste Schritte JCreator arbeitet nicht mehr als Eingabeaufforderung. Warum? Java Basics - Anfänger-Themen 5
C Programm arbeitet nicht weiter Java Basics - Anfänger-Themen 2
M split arbeitet nicht richtig Java Basics - Anfänger-Themen 2
G Key Listener arbeitet Fehlerhaft Java Basics - Anfänger-Themen 6
K Jcreator arbeitet wieder aber trotzdem probleme mit de Java Basics - Anfänger-Themen 7
W Konstruktur arbeitet nicht richtig? Java Basics - Anfänger-Themen 3
G g.drawLine arbeitet sehr ungenau. Java Basics - Anfänger-Themen 4
F setCursor arbeitet unerwartet Java Basics - Anfänger-Themen 2
S Wie arbeitet iter.next() Java Basics - Anfänger-Themen 3
M Das Betribssystem arbeitet aber es wird nix angezeigt ? Java Basics - Anfänger-Themen 12
H Wie arbeitet man mit Beans? Java Basics - Anfänger-Themen 8
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
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
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
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
C Sinn eines Interfaces? Java Basics - Anfänger-Themen 4
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
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
V mehrfachvererbung unter interfaces Java Basics - Anfänger-Themen 10
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
T Interfaces und Implementierungen Java Basics - Anfänger-Themen 12
S Interface mehrere Interfaces Java Basics - Anfänger-Themen 2
M Vererbung Problem bei Interfaces Java Basics - Anfänger-Themen 8
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
F Interfaces Java Basics - Anfänger-Themen 4
M Frage zu Interfaces Java Basics - Anfänger-Themen 3
N Generics und Interfaces Java Basics - Anfänger-Themen 5
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
N OOP Vererbung von Interfaces Java Basics - Anfänger-Themen 12
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
P Frage zu Interfaces Bsp. Java Basics - Anfänger-Themen 9
A Deklarationen in abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 11
R Adapterklassen vs Interfaces Java Basics - Anfänger-Themen 6
P Interfaces -> eins oder mehrere für eine Anwendung? Java Basics - Anfänger-Themen 9
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
A Obstlager Interfaces Java Basics - Anfänger-Themen 7
K Theor. Frage zu Interfaces Java Basics - Anfänger-Themen 30
T Frage zu Interfaces und Abstrakten Klassen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben