Abstrakte Klasse oder Interface?
Kurz: Eine abstrakte Klasse ist ein unfertiger Bauplan mit gemeinsamem Zustand und Code. Ein Interface ist ein reiner Vertrag: Es legt fest, was eine Klasse können muss, nicht wie.
Genauer: Beide kann man nicht direkt instanziieren. Eine Klasse erbt von höchstens einer abstrakten Klasse, kann aber viele Interfaces umsetzen. Moderne Interfaces dürfen zwar Standardmethoden enthalten, aber keinen Objektzustand.
Im Detail
| Merkmal | Abstrakte Klasse | Interface |
|---|---|---|
| Felder mit Zustand | ja | nein (nur Konstanten) |
| Konstruktor | ja | nein |
| Mehrfachvererbung | nein | ja (viele Interfaces) |
| Methoden mit Code | ja | seit Java 8 als default |
| Beziehung | „ist ein“ | „kann“ |
- Abstrakte Klasse wählen: wenn verwandte Klassen Code und Zustand teilen (
Tiermit Name undessen()). - Interface wählen: wenn unterschiedliche Klassen dieselbe Fähigkeit haben (
Comparable,Runnable). - Beispiel:
abstract class Form { abstract double flaeche(); },interface Zeichenbar { void zeichne(); }. - Kombination: Oft beides: Interface als Vertrag, abstrakte Klasse als Grundgerüst.
Siehe auch: abstraktion, Vererbung