[JAVA] Interfaces/abstrakte Klassen

nightsky99

Grand Admiral Special
Mitglied seit
25.11.2001
Beiträge
2.043
Renomée
19
Standort
Wuppertal
Da ich morgen meine mündliche Prüfung in Informatik ablegen muss und schon eine MENGE gelernt habe, quält mich eine Frage:

Was ist Unterschied von einem Interface und einer abstrakten Klasse in Java? Bis auf die Tatsache das man von mehreren Interfaces erben kann, aber nur von einer Klasse (also eine Art Mehrfachvererbung).
Ich mein bei beiden muss man die Methoden die in der Oberklasse leer implentiert worden sind ausschreiben in den Unterklassen, d.h. auf der Basis der Polymorphie können die Implentierungen unterschiedlich sein. Aber wie entscheide ich ob ich eine abstrakte Klasse nehme oder ein Interface ???

Weiss da jemand eine Antwort drauf? (lassen wir die Mehrfachvererbung außen vor)
 
Technisch dürfte es eigentlich keinen Unterschied geben. Dürfte reine Formsache sein, in C++ hast du nämlich keine Interfaces.

Allgemein gesehen kann ein Interface keinen Code enthalten - eine Klasse die du vererbst schon.
Wenn die Klasse allerdings abstrakt ist kann die auch keinen Code enthalten, von daher dürfte es also keinen Unterschied geben.
 
stimmt nicht.

eine abstakte Klasse kann Code enthalten - Interfaces nicht.

Ein Interface ist mehr oder weniger wie ein Header File in C++ enthält also nur die Signaturen der Funktionen (jedoch nicht den Code).

Abstrakte Klassen können aber im Gegensatz zu normalen Klassen nicht instanziert werden.
Als abstrakt gekeinnzeichnete Funktionen müssen in Klassen, welche von der abstrakten Klasse erben implementiert werden (wie bei Interfaces).


siehe auch hier:
http://java.sun.com/docs/books/tutorial/java/javaOO/abstract.html
 
Im Endeffekt also wie eine C++ Klasse die noch irgendeinen virtual Teil enthält der noch hinzu-abgeleitet werden muss.

Naja, Klassen gefallen mir in C++ besser, allerdings vermisse ich da die Java Interfaces. Dafür gehen in C++ eben die wildesten Vererbungsgeschichten, jede Klasse kann mit jeder anderen Klasse Kinder und Enkel bekommen, Inzucht ist kein Problem und Fremdgehen tut jede Klasse früher oder später sowieso mal.

Wie im richtigen Leben ;D. Und da sage nochmal einer Progger wären Realitätsfern *chatt*
 
Eigentlich ist das sogar Absicht, dass es sowas wie die Mehrfachvererbung wie unter C++ gibt, weil das zu sehr unübersichtlichen und zum Teil auch sinnlosen Code führt wenn die Vererbung falsch angewendet wird.

Wobei... ich hab heut auch schon genug sinnlosen Java Code gesehn... Also ich bin der Meinung man sollte nicht zu viel mit Vererbung machen.
Klassen, die von 3 abstrakten Klassen und 2 Interfaces erben sind nicht wirklich leicht zu ändern und zu lesen...

Man sollte sich lieber eher solch schöne Patterns wie ValueObjects, DAOs und Class-Factory anschauen und diese sinnvoll einsetzen. Oder Facades und das alles bei J2EE.
Das hilft meist mehr als die tollste Vererbung.(leider lernt man das aber meist nicht an dern Unis)
 
Original geschrieben von PeterBond
Eigentlich ist das sogar Absicht, dass es sowas wie die Mehrfachvererbung wie unter C++ gibt, weil das zu sehr unübersichtlichen und zum Teil auch sinnlosen Code führt wenn die Vererbung falsch angewendet wird.

Wobei... ich hab heut auch schon genug sinnlosen Java Code gesehn... Also ich bin der Meinung man sollte nicht zu viel mit Vererbung machen.
Klassen, die von 3 abstrakten Klassen und 2 Interfaces erben sind nicht wirklich leicht zu ändern und zu lesen...

Man sollte sich lieber eher solch schöne Patterns wie ValueObjects, DAOs und Class-Factory anschauen und diese sinnvoll einsetzen. Oder Facades und das alles bei J2EE.
Das hilft meist mehr als die tollste Vererbung.(leider lernt man das aber meist nicht an dern Unis)

Ja, ich nehm die Dinger auch praktisch ausschließlich als Interface. Code vererbe ich wirklich ungern, weil das dann sehr unsauber wird.

Aber ein Interface aus einem Interface, welches 2 andere Interfaces implementiert die schließlich eine Klasse bilden... das hat was *chatt*

(mit Interfaces mein ich C++ Klassen ohne Code)
 
Also ich hab an der Uni die wichtigsten Patterns gelernt, Observer, Factory, Fascade, Singelton, Proxy usw....und in einer Stunde muss ich einen vortrag darüber halten :]

Das Prob ist man muss diese Muster erstmal anwenden können, so aus dem ff geht das bei mir nich...muss man also schon mehrmals programmieren damit das in Fleisch und Blut übergeht.
Was die Interfaces + abstrakten Klassen betrifft: so viele Unterschiede gibs da scheinbar wirklich nicht, bis auf Mehrfachvererbung und Implementation *noahnung* is ja aber nich schlimm ;D
 
Zurück
Oben Unten