Java Verberung von Interfaces in abstrakten Klassen

wannabe_nerd

Lieutenant
Registriert
Mai 2009
Beiträge
753
Hey Leute,

Ich habe da eine Frage für die Java-Cracks hier:

Ich habe eine abstrakte Klasse 'Connect' und möchte allen davon abgeleiteten Klassen 'vorschreiben', dass sie die beiden Interfaces 'Switchable' und 'Controlable' implementieren müssen.

Muss ich dazu nun in den subklassen von 'Connect' immer die Interfaces angeben oder kann ich in der Deklaration der abstrakten Klasse sagen:
...implements Switchable, Controlable

Meinem Verständnis nach müssten doch die abgeleiteten Klassen die Interfaces von der abstrakten Klasse erben oder nicht?

Bitte helft mir mal diesen Zusammenhang zu klären.

Danke
 
Vollkommen richtig erkannt, einfach deine Klasse Connect die beiden Interfaces implementieren lassen, das wird vererbt :) Falls du Eclipse nutzt, schau mal eine Klasse wie ArrayList mit F4 an, da siehst du die Vererbungshierarchie der ganzen Interfaces.
 
Aber Connect ist doch abstrakt, d.h. ich kann die Rümpfe der Methoden aus den Interfaces gar nicht implementieren. Bisher dachte ich immer, dass ich, wenn ich ein Interface angebe auch die Methoden vollständig implementieren MUSS.
Oder bilden abstrakte Klassen eine Ausnahme dafür?
 
Du implementierst sie einfach als abstrakte Methoden.

*korrektur*
Bei Java ists anscheinend nicht so wie bei C#. Da ist das wirklich ne Ausnahme und du mussts nicht implementieren.
 
Zuletzt bearbeitet:
Abstrakte Klassen geben erbenden Klassen bestimmte Methoden vor, die sie implementieren müssen. Das können entweder Methoden von Interfaces der abstrakten Klasse (oder geerbten Interfaces) oder eben abstrakte Methoden sein.

Code:
public abstract class Connect implements Controlable, Switchable {

}

Diese leere abstrakte Klasse ist durchaus korrekt für den Compiler.
Ergänzung ()

wannabe_nerd schrieb:
Aber Connect ist doch abstrakt, d.h. ich kann die Rümpfe der Methoden aus den Interfaces gar nicht implementieren.

Eine abstrakte Klasse kann natürlich auch vollständig implementierte Methoden enthalten und nicht nur abstrakte Methoden. Was würde eine solche Klasse sonst von einem Interface unterscheiden?
 
Zuletzt bearbeitet:
Zurück
Oben