Interfaces und abstrakte Klassen - Abgrenzung

Dr Franke Ghostwriter
Bei der Umsetzung von Programmen gibt's ja meist mehrere Lösungswege, aber i.d.R. nur einen Königsweg (d.h. die gewünschte Lösung in Klausuren 😉).

Mein Problem: Was gehört in eine abstrakte Klasse, was in ein Interface?
In der Praxis kann ich Programme sowohl ohne Interface als auch ohne abstrakte Klasse lauffähig machen, wenn ich nun aber beides nutzen will/soll, was packe ich dann wo hinein?
Gibts eine "Faustregel", die immer hilft? Oder zumindest eine Abgrenzung?

Danke
Dennis
 
eine Faustregel gibt es eigentlich nicht. Mit einem Interface beschreibt man die Schnittstelle ohne die konkrete Implementierung zu verwenden. Die Implementierung ist dir als Entwickler also vollkommen egal wenn du das Interface verwendest. Das hat den großen Vorteil, dass du die Implementierung relativ einfach austauschen kannst ohne den Rest deines Programms anpassen zu müssen.

Eine abstrakte Klasse enthält bereits Implementierungen der einzelnen Methoden. In der Praxis verwendet man diese Klassenart wenn man Klassen mit einer gewissen Grundfunktion bereitstellen möchte, die sich also in den Grundfunktionen gleich verhalten und die gleiche Schnittstelle haben einen Teil der Methoden, also die Logik, aber für jede Klasse anders implementiert.

Eine abstrakte Klasse schließt z.B. ein Interface nicht aus 😉

public abstract class MyList extends ArrayList implements Serializable {
}

Wäre eine Klasse die von ArrayList erbt und das Serializable Interface implementiert.

Gruß
Kamuffel
 
Eine Java-Klasse ist nur von EINER anderen Klasse ableitbar. Java kennt keine Mehrfachvererbung (multiple inheritance). Mittels Interface kann eine Klasse mehrere Methodensignaturen implementieren (erben): class A implements B,C,D ....

-Kai
 
Oben