# Unterschied Interface - abstrakte Klasse



## Acha (26. Jun 2006)

Hallo,

ich habe nun selbst einmal eine Theoriefrage. 

Eine abstrakte Klasse ist doch im Endeffekt eine Klasse von der keine eigenen Instanzen erzeugt werden können. Abstrakte Methoden, die sich in einer abstrakten Klasse befinden können enthalten nur Deklarationen und keine Definitionen, welche die erbende Klasse implementieren muß. Und auch erst die erbende Klasse kann Instanzen erzeugen.

Ein Interface dagegen ist eine Art Vertrag, welche Methoden eine Klasse implementieren muß, die ein Interface implementiert.

Ich weiß, wie die Syntax der beiden Sachen aussieht und habe auch schon beides ausprobiert. Allerdings ist mir nicht so wirklich der Unterschied in der Anwendung von abstrakter Klasse und Interface klar! Wann verwendet man was?

Vielen Dank im Vorraus für Eure Antworten!

MFG

Acha


----------



## Bert Brenner (26. Jun 2006)

Eine abstrakte Klasse kann schon einige fertig implementierte Methoden mitbringen, ein Interface nicht.


----------



## bygones (26. Jun 2006)

man könnte dezent auf die Forensuche verweisen 

Das Interface ist ein Spezialfall einer abstrakten Klassen, in dem keine Methodenimplementierungen bzw. Variablendeklarationen (außer konstanten) erlaubt sind.

Abstrakte Klassen kommen in der Vererbungshierarchie vor. Wenn du eine Oberklasse hast, von der es aber unsinnig ist Instanzen zu bilden.

mein Lieblingsbeispiel:

Klasse Mann und Frau. Beide haben vieles gemeinsam und (leider) auch vieles unterschiedlich. Ergo baut man eine Oberklasse für die Gemeinsamkeiten -> Klasse Mensch. Nun will man aber, dass ein mensch entweder Frau oder Mann ist. Also macht man die Klasse Mensch abstrakt. Der Vorteil hierbei ist auch, dass die unterklasse gezwungen werden kann eine Methode zu implementieren (was bei normaler Vererbung ja nicht zwingend ist).


Interfaces wiederum dienen eigentlich mehr zur Funktions- bzw. Eigenschaftsbeschreibung. Bsp Comparable. Einem sortierer ist es schnuppe was er sortiert, solange man ihm sagt, wie die Instanzen zu ordnen sind. D.h. man definiert durch ein Interface eine Eigenschaft bzw ein Verhalten für eine Klasse.

d.h. im grunde handelt es sich hier um zwei grundlegend verschiedene Einsatzgebiete - die oft gemischt werden. 

Als Rule of Thumb: Interfaces sollten abstrakten Klassen vorgezogen werden

jetzt aber - Forensuche und "Effective Java - Programming Language Guide" Item 17


----------



## Acha (26. Jun 2006)

Hast ja Recht @deathbyaclown!... Hatte irgendwie nicht genug Geduld mit der Forensuche, um wirklich den Unterschied herauszubekommen!  

Trotzdem vielen Dank Euch beiden für die schnellen Antworten!   

MFG

Acha


----------



## merxleben (26. Jun 2006)

Hallo,

Der Hauptunterschied zwischem beiden liegt in der Einsetzbarkeit. Ein Vorteil von Interfaces besteht ja darin, dass eine Klasse mehrere Interfaces implementieren kann. Im Gegensatz dazu gibt es in Java nicht die Möglichkeit der Mehrfachvererbung.

Mal ganz schnell ins Blaue geschossen

Martin


----------

