Interfaces¶
Kurzüberblick¶
Ein Interface ist eine Schnittstelle bzw. ein Vertrag, der festlegt, welche Methoden eine Klasse bereitstellen muss, ohne deren konkrete Implementierung vorzugeben.
-> Ziel: Trennung von Was (Schnittstelle) und Wie (Implementierung)
Grundprinzip¶
Ein Interface beschreibt nur die Fähigkeiten eines Objekts, nicht dessen konkrete Umsetzung.
- Eine Klasse, die ein Interface implementiert, ist verpflichtet:
- alle Methoden zu implementieren
- Das Schlüsselwort dafür lautet:
implements
Struktur eines Interfaces¶
interface Fahrzeug {
void starten();
void stoppen();
}
-> Enthält nur Methodensignaturen (ohne Implementierung)
Implementierung eines Interfaces¶
class Auto implements Fahrzeug {
@Override
public void starten() {
System.out.println("Auto startet");
}
@Override
public void stoppen() {
System.out.println("Auto stoppt");
}
}
Erklärung¶
Autoverpflichtet sich, den Vertrag vonFahrzeugzu erfüllen- Alle Methoden müssen implementiert werden
@Overrideist optional, aber Best Practice
Ablauf (Konzeptuell)¶
flowchart TD
A[Interface definiert Methoden] --> B[Klasse implementiert Interface]
B --> C[Methoden müssen konkret implementiert werden]
C --> D[Objekt kann über Interface-Typ verwendet werden]
Zentrale Eigenschaften von Interfaces¶
1. Abstraktion¶
- Interfaces beschreiben nur Verhalten
- Keine konkrete Logik (Ausnahme:
default-Methoden seit Java 8)
2. Mehrfachvererbung (wichtig!)¶
class Amphibienfahrzeug implements Fahrzeug, Schwimmbar {
}
-> Eine Klasse kann mehrere Interfaces gleichzeitig implementieren
3. Standardregeln (klassisches Java-Verständnis)¶
- Methoden sind implizit:
publicabstract- Variablen sind:
public static final(Konstanten)
4. Erweiterungen (moderne Java-Versionen)¶
Interfaces können zusätzlich enthalten:
default-Methoden (mit Implementierung)static-Methoden- (seit Java 9) auch
privateHilfsmethoden
-> Wichtig für Prüfung: Grundprinzip bleibt trotzdem "Vertrag"
Praktisches Beispiel (Polymorphismus)¶
Fahrzeug f = new Auto();
f.starten();
Erklärung¶
- Variable ist vom Typ Interface
- Objekt ist konkrete Klasse
- → Polymorphismus
-> Vorteil: Austauschbarkeit der Implementierung
Praxisbeispiel (echter Nutzen)¶
Stell dir ein Zahlungssystem vor:
interface Payment {
void pay(double amount);
}
Implementierungen:
class CreditCardPayment implements Payment {
public void pay(double amount) {
System.out.println("Bezahlt mit Kreditkarte");
}
}
class PayPalPayment implements Payment {
public void pay(double amount) {
System.out.println("Bezahlt mit PayPal");
}
}
-> Neue Zahlungsmethoden können hinzugefügt werden, ohne bestehenden Code zu ändern.
Interfaces vs. abstrakte Klassen¶
| Merkmal | Interface | Abstrakte Klasse |
|---|---|---|
| Zweck | Vertrag definieren | Gemeinsame Basis + Verhalten |
| Methoden | (klassisch) abstrakt | abstrakt + konkret |
| Konstruktoren | ❌ Nein | ✅ Ja |
| Mehrfachvererbung | ✅ Ja | ❌ Nein |
| Variablen | Konstanten (static final) |
Instanzvariablen möglich |
| Zugriff | Methoden sind public |
alle Sichtbarkeiten möglich |
| Verwendung | Verhalten definieren | gemeinsame Logik teilen |
Wichtige Einordnung¶
- Interface = "Was kann ein Objekt?"
- Abstrakte Klasse = "Was ist ein Objekt?"
-> Interfaces fördern stärkere Entkopplung
Wann verwendet man Interfaces?¶
Typische Einsatzfälle:
- Definition von APIs / Schnittstellen
- Austauschbare Implementierungen (z. B. Datenbanken, Zahlungsarten)
- Testbarkeit (Mocks, Stubs)
- Umsetzung von Design Patterns (z. B. Strategy, Factory)
Prüfungsrelevanz¶
Du solltest sicher erklären können:
- Was ein Interface ist (→ Vertrag!)
- Unterschied zu abstrakten Klassen
- Bedeutung von
implements - Warum Mehrfachvererbung nur mit Interfaces möglich ist
- Wie Polymorphismus mit Interfaces funktioniert
Typische Prüfungsfrage:
Warum sind Interfaces wichtig für lose Kopplung?
Antwort:
Weil Code gegen ein Interface programmiert wird und nicht gegen eine konkrete Implementierung. Dadurch können Implementierungen leicht ausgetauscht werden, ohne den restlichen Code zu verändern.
Häufige Fehler und Missverständnisse¶
„Interface = keine Implementierung“ (nicht mehr ganz korrekt)¶
Seit Java 8:
default void starten() {
System.out.println("Standardstart");
}
-> Interfaces können teilweise Verhalten enthalten
Verwechslung mit abstrakten Klassen¶
- Interface = Vertrag
- Abstrakte Klasse = teilweise fertige Klasse
Methoden nicht implementiert¶
class Auto implements Fahrzeug {
// Fehler, wenn Methoden fehlen
}
-> Compilerfehler, wenn nicht alle Methoden implementiert sind
Falsche Verwendung für gemeinsame Daten¶
Interfaces sind nicht dafür gedacht, viele Variablen zu speichern.
Merksätze¶
- Ein Interface ist ein Vertrag für Verhalten
implements= „Ich erfülle diesen Vertrag“- Eine Klasse kann mehrere Interfaces implementieren
- Interfaces ermöglichen Polymorphismus und Austauschbarkeit
- Interfaces fördern lose Kopplung und sauberes Design
Zusammenfassung¶
Interfaces sind ein zentrales Konzept der objektorientierten Programmierung in Java. Sie definieren, welche Methoden eine Klasse bereitstellen muss, ohne die Implementierung festzulegen. Dadurch ermöglichen sie flexible, erweiterbare und wartbare Softwarearchitekturen. Besonders wichtig sind sie für Polymorphismus, Mehrfachvererbung und lose Kopplung zwischen Systemkomponenten.