Abstrakt, Enum & Record
Abstrakte Klassen, Enums und Records ergänzen den OOP-Werkzeugkasten für sauberere Modelle.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Mini-Erfolg
Du hast einen Spielzustand als Enum und ein Ergebnis als Record modelliert.
Warum das wichtig ist: Diese Bausteine ersetzen magische Strings und halbfertige Klassen durch klare, typsichere Modelle.
Das darf schwer sein
Das ist ein Fortgeschrittenen-Thema. Lies es einmal in Ruhe, baue das Mini-Projekt und komm später zurück. Du musst es nicht sofort können.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
Abstrakte Klassen
abstract-Klassen können nicht direkt instanziert werden — sie sind Basis für Unterklassen.
Sie mischen fertige Methoden mit abstrakten, die Unterklassen ausfüllen müssen.
public abstract class Aufgabe {
public abstract boolean prüfen(String eingabe);
public void bewerten(String eingabe) {
System.out.println(prüfen(eingabe) ? "Richtig!" : "Falsch");
}
}Enums
Ein enum definiert eine feste Menge benannter Werte — typsicher statt magischer Strings.
Enums funktionieren perfekt mit switch.
public enum Schwierigkeit {
LEICHT, MITTEL, SCHWER
}
Schwierigkeit stufe = Schwierigkeit.MITTEL;Records
record erzeugt eine unveränderliche Datenklasse mit Konstruktor, Gettern, equals und toString — in einer Zeile.
Ideal für Werte-Objekte wie Ergebnisse oder Koordinaten.
public record QuizErgebnis(String modul, int punkte, int gesamt) {}
var ergebnis = new QuizErgebnis("java", 8, 10);
ergebnis.punkte(); // 8Vertiefung
Enum, Record und sealed
Enums sind mehr als Konstanten: Sie können Felder und Methoden haben. Records sind ideale Werteträger, weil equals, hashCode, toString und Getter automatisch entstehen.
Sealed Classes begrenzen, welche Klassen eine Oberklasse erweitern dürfen. Das macht Modelle geschlossen und switch-Prüfungen vollständig. Für den Einstieg reicht: Enum für Zustände, Record für Daten.
enum Zustand { START, LAUFEND, GEWONNEN }
record Punktestand(String name, int punkte) {}
var stand = new Punktestand("Ada", 42);
System.out.println(stand.name() + ": " + stand.punkte());Merksatz: Enum macht Zustände typsicher, Record macht Datenklassen kurz. Beides reduziert Boilerplate und magische Strings.
Übungsaufgabe
Spielzustand und Punktestand
Modelliere einen Spielzustand als Enum und einen Punktestand als Record. Gib beide aus und vergleiche zwei Records mit equals.
Das soll dein Programm können
- Enum mit mindestens drei Zuständen
- Record mit Name und Punkten
- Zwei Records erzeugen
- equals und Ausgabe demonstrieren
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
Ein Record deklariert seine Komponenten in der Kopfzeile: record Punktestand(String name, int punkte) {}. Zugriff über name() und punkte().
Lösung anzeigen
public class Spiel {
enum Zustand { START, LAUFEND, GEWONNEN }
record Punktestand(String name, int punkte) {}
public static void main(String[] args) {
Zustand zustand = Zustand.LAUFEND;
Punktestand a = new Punktestand("Ada", 42);
Punktestand b = new Punktestand("Ada", 42);
System.out.println(zustand);
System.out.println(a.name() + ": " + a.punkte());
System.out.println("Gleich: " + a.equals(b));
}
}Warum funktioniert das?
Records vergleichen ihre Komponenten wertebasiert. Deshalb ist a.equals(b) true, obwohl es zwei verschiedene Objekte sind.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Spaßprojekt
Spielzustand
Baue ein Enum Spielzustand (START, LAUFEND, GEWONNEN) und einen Record Punktestand(String name, int punkte).
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.