Eine abstrakte Klasse ist eine Klasse, die nicht direkt instanziiert werden kann (kein new). Sie dient als Blaupause für Unterklassen: Sie legt gemeinsame Felder, Methoden und Verhalten fest, lässt aber Teile der Implementierung bewusst offen. Erst eine konkrete Unterklasse, die alle offenen Stellen ausfüllt, kann Objekte erzeugen.
Abgrenzung: Abstraktion als Prinzip vs. abstrakte Klasse als Konstrukt
Die Abstraktion ist ein allgemeines Denkprinzip: Sie blendet irrelevante Details aus und reduziert Komplexität. Die abstrakte Klasse ist dagegen eine konkrete Sprachkonstruktion der Objektorientierung, die dieses Prinzip technisch umsetzt — als Vorlage im Klassensystem einer Programmiersprache.
Abstrakte Methoden
Eine abstrakte Methode besitzt nur eine Signatur, aber keine Implementierung. Jede nicht-abstrakte Unterklasse muss sie überschreiben (Overriding); andernfalls bleibt die Unterklasse selbst abstrakt und kann ebenfalls nicht instanziiert werden.
// Java: abstrakte Klasse mit abstrakter Methode
abstract class Tier {
protected String name; // gemeinsamer Zustand
Tier(String name) { this.name = name; }
abstract void lautGeben(); // Unterklassen implementieren das
}
class Hund extends Tier {
Hund() { super("Bello"); }
void lautGeben() { System.out.println("Wuff!"); }
}
Sprachübergreifend
- Java:
abstract classbzw.abstractvor Methoden; Konstruktoren sind erlaubt, sie werden in der Vererbungskette aufgerufen. - C++: rein virtuelle Funktionen (
virtual void lautGeben() = 0;); eine Klasse mit mindestens einer rein virtuellen Funktion ist abstrakt. - Python: Modul
abcmitABCMetaund Dekorator@abstractmethod; Instanziierung wird erst zur Laufzeit verhindert. - C#:
abstract class— wie in Java, mitabstract-Methoden.
Abstrakte Klasse vs. Interface
Ein Interface definiert einen reinen Vertrag aus Methodensignaturen (ohne Zustand und ohne Implementierung). Eine abstrakte Klasse darf dagegen Zustand (Felder, Instanzvariablen), konkrete Methoden und Konstruktoren mitbringen. Faustregel: Interface für „was kann es?“, abstrakte Klasse für „was hat es gemeinsam?“.
Praxis
- Gemeinsame Basislogik (z. B. Template-Methoden-Muster): Rahmenalgorithmus in der abstrakten Klasse, Details in Unterklassen.
- Gemeinsame Konstanten oder Konfiguration für eine komplette Klasse von Objekten.
- Die Kapselung bleibt erhalten: private Felder mit Sichtbarkeit und Getter/Settern.
Verwandte Grundlagen: Klasse, Objekt, Methode, Polymorphie, Konstruktor, this/self.