Interfaces
Ein Interface ist ein Vertrag: Es legt fest, WAS eine Klasse können muss — nicht WIE sie es umsetzt.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Mini-Erfolg
Zwei verschiedene Klassen erfüllen dasselbe Interface und werden gleich behandelt.
Warum das wichtig ist: Interfaces sind überall in Java: List, Map, Comparable und in Spring. Sie machen Code austauschbar.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
Definieren und implementieren
Ein Interface deklariert Methodensignaturen ohne Rumpf.
implements verpflichtet eine Klasse, alle Methoden umzusetzen. Eine Klasse kann mehrere Interfaces implementieren.
public interface Speicherbar {
void speichern();
}
public class Profil implements Speicherbar {
@Override
public void speichern() {
System.out.println("Profil gespeichert");
}
}Gegen Schnittstellen programmieren
Variablen und Parameter sollten den Interface-Typ tragen: List statt ArrayList.
So lässt sich die Implementierung austauschen, ohne den restlichen Code anzufassen.
List<String> namen = new ArrayList<>();
// später austauschbar:
// List<String> namen = new LinkedList<>();default-Methoden
Interfaces dürfen Standard-Implementierungen mitliefern (default).
So lassen sich Interfaces erweitern, ohne alle Implementierungen zu brechen.
Vertiefung
Verträge statt Erbketten
Ein Interface beschreibt Fähigkeiten, die nicht in eine Vererbungshierarchie passen. Ein Konto und ein Warenkorb können beide „bezahlbar“ sein, ohne verwandt zu sein.
Code sollte gegen den Interface-Typ programmieren: List statt ArrayList, Bezahlbar statt Kreditkarte. Dadurch lässt sich die konkrete Implementierung austauschen.
interface Bezahlbar {
void bezahlen(int betrag);
}
void kassiere(Bezahlbar zahlung, int betrag) {
zahlung.bezahlen(betrag);
}
kassiere(new Kartenzahlung(), 42);Merksatz: Interfaces entkoppeln Code von konkreten Klassen. Sie sind der Grund, warum Java-APIs so austauschbar wirken.
Übungsaufgabe
Bezahlarten
Definiere ein Interface Bezahlbar mit bezahlen(int betrag). Implementiere Kartenzahlung und Barzahlung und rufe beide über den Interface-Typ auf.
Das soll dein Programm können
- Interface mit einer Methode
- Zwei Implementierungen mit @Override
- Eine Methode, die Bezahlbar entgegennimmt
- Beide Varianten aufrufen
Schreibe den Code hier oder in deiner IDE und vergleiche ihn dann mit der Lösung.
Dein Code wird automatisch auf diesem Gerät gespeichert.
Hinweis anzeigen
Die Methode kassiere(Bezahlbar zahlung, int betrag) muss nicht wissen, welche Klasse dahintersteckt.
Lösung anzeigen
interface Bezahlbar {
void bezahlen(int betrag);
}
class Kartenzahlung implements Bezahlbar {
@Override
public void bezahlen(int betrag) {
System.out.println("Karte: " + betrag + " EUR");
}
}
class Barzahlung implements Bezahlbar {
@Override
public void bezahlen(int betrag) {
System.out.println("Bar: " + betrag + " EUR");
}
}
public class Kasse {
public static void main(String[] args) {
kassiere(new Kartenzahlung(), 42);
kassiere(new Barzahlung(), 17);
}
static void kassiere(Bezahlbar zahlung, int betrag) {
zahlung.bezahlen(betrag);
}
}Warum funktioniert das?
kassiere kennt nur den Vertrag. Neue Bezahlarten können ergänzt werden, ohne diese Methode zu ändern — das ist der eigentliche Gewinn.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Spaßprojekt
Bezahlen leicht gemacht
Definiere Bezahlbar mit bezahlen(). Baue Kartenzahlung und Barzahlung und rufe beide über den Interface-Typ auf.
Selbstcheck
Kann ich das schon?
Hake ab, was du wirklich erklären oder selbst bauen könntest.
Fortschritt
Bereit zum Abschließen?
Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.