Interfaces und abstrakte Klassen¶
Überblick / Definition¶
Interfaces und abstrakte Klassen sind zentrale Konzepte der objektorientierten Programmierung zur Abstraktion und Strukturierung von Code.
- Interface: Definiert einen Vertrag (was muss vorhanden sein)
- Abstrakte Klasse: Liefert eine Teilimplementierung (wie etwas teilweise funktioniert)
- Abstraktalgorithmus: Definiert eine feste Ablaufstruktur mit variablen Teil-Schritten (Template Method Pattern)
Interfaces¶
Ein Interface beschreibt nur die Methoden-Signaturen, jedoch keine Implementierung (Ausnahme: default/static Methoden in Java).
➡️ Ziel: Einheitliche Schnittstelle für unterschiedliche Klassen
Eigenschaften¶
- Keine Instanziierung möglich
- Methoden sind implizit
public abstract - Klassen können mehrere Interfaces implementieren
- Erzwingt die vollständige Implementierung aller Methoden
Beispiel¶
public interface Fahrzeug {
void fahren();
void bremsen();
}
public class Auto implements Fahrzeug {
@Override
public void fahren() {
System.out.println("Das Auto fährt.");
}
@Override
public void bremsen() {
System.out.println("Das Auto bremst.");
}
}
Kerngedanke¶
Ein Interface beantwortet die Frage:
👉 „Was kann ein Objekt?“
Abstrakte Klassen¶
Eine abstrakte Klasse ist eine nicht instanziierbare Basisklasse, die sowohl:
- abstrakte Methoden (ohne Implementierung)
- konkrete Methoden (mit Implementierung)
enthalten kann.
Eigenschaften¶
- Deklaration mit
abstract - Kann Attribute und Konstruktoren besitzen
- Unterklassen müssen abstrakte Methoden implementieren
- Unterstützt Code-Wiederverwendung
Beispiel¶
public abstract class Tier {
public abstract void machenGeräusch();
public void schlafen() {
System.out.println("Das Tier schläft.");
}
}
public class Hund extends Tier {
@Override
public void machenGeräusch() {
System.out.println("Der Hund bellt.");
}
}
Kerngedanke¶
Eine abstrakte Klasse beantwortet:
👉 „Was haben alle Objekte gemeinsam?“
Abstrakte Methoden¶
Abstrakte Methoden:
- Haben keinen Methodenkörper
- Werden in abstrakten Klassen definiert
- Müssen von Unterklassen implementiert werden
public abstract void machenGeräusch();
➡️ Zweck: Erzwingen einer konkreten Umsetzung in Spezialisierungen
Abstraktalgorithmen (Template Method Pattern)¶
Ein Abstraktalgorithmus beschreibt:
👉 Eine feste Ablaufstruktur, aber variable Teilschritte
Das ist ein klassisches Entwurfsmuster: Template Method Pattern
Struktur¶
flowchart TD
A["Start: sortieren(array)"] --> B["vorbereiten(array)"]
B --> C["sortierenImpl(array)\nabstrakter Schritt"]
C --> D["abschliessen(array)"]
Beispiel¶
public abstract class SortierAlgorithmus {
public void sortieren(int[] array) {
vorbereiten(array);
sortierenImpl(array);
abschließen(array);
}
protected void vorbereiten(int[] array) {
// z.B. Validierung
}
protected abstract void sortierenImpl(int[] array);
protected void abschließen(int[] array) {
// z.B. Ausgabe
}
}
Kerngedanke¶
- Algorithmusstruktur ist fix
- Details sind variabel
➡️ Wiederverwendbarkeit + Erweiterbarkeit
Vergleich: Interface vs. abstrakte Klasse¶
| Kriterium | Interface | Abstrakte Klasse |
|---|---|---|
| Zweck | Vertrag definieren | Gemeinsame Basis schaffen |
| Methoden | Nur abstrakt (meist) | Abstrakt + konkret |
| Mehrfachvererbung | ✅ möglich | ❌ nicht möglich |
| Attribute | Nur Konstanten | Normale Attribute möglich |
| Konstruktor | ❌ nein | ✅ ja |
| Verwendung | Fähigkeiten beschreiben | Gemeinsamkeiten bündeln |
Praktisches Beispiel (Kombination)¶
public interface Beweglich {
void bewegen();
}
public abstract class Lebewesen {
public abstract void atmen();
}
public class Mensch extends Lebewesen implements Beweglich {
@Override
public void atmen() {
System.out.println("Mensch atmet.");
}
@Override
public void bewegen() {
System.out.println("Mensch läuft.");
}
}
Prüfungsrelevanz¶
Typische Prüfungsfragen:
- Unterschied zwischen Interface und abstrakter Klasse erklären
- Code analysieren: Was muss implementiert werden?
- Erkennen von Template Method Pattern
- Einsatzentscheidung:
- Interface vs. abstrakte Klasse begründen
Häufige Fehler & Klarstellungen¶
❌ Fehler 1: Interface = „besser“¶
➡️ Falsch — hängt vom Anwendungsfall ab
❌ Fehler 2: Abstrakte Klasse = nur abstrakte Methoden¶
➡️ Falsch — konkrete Methoden sind zentral!
❌ Fehler 3: Verwechslung von „Vertrag“ und „Implementierung“¶
- Interface → nur Vertrag
- Abstrakte Klasse → teilweise Implementierung
❌ Fehler 4: Abstraktalgorithmus nicht erkennen¶
➡️ Achte auf:
- final oder feste Ablaufmethode
- Aufruf abstrakter Methoden innerhalb dieser Struktur
Zusammenfassung¶
- Interface = „Was kann ein Objekt?“
- Abstrakte Klasse = „Was ist gemeinsam?“
- Abstraktalgorithmus = „Wie läuft etwas grundsätzlich ab?“
➡️ Kombination ermöglicht flexible, wartbare und erweiterbare Softwarearchitektur