Kapselung & Konstruktoren
Gute Objekte lassen keine unmöglichen Zustände zu. Ein Konstruktor ist der Türsteher, private schützt die Daten, und Validierung verhindert Unsinn.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Mini-Erfolg
Dein Konto lässt kein negatives Guthaben zu und meldet den Versuch verständlich.
Warum das wichtig ist: Gute Objekte lassen keine unmöglichen Zustände zu. Das verhindert viele Fehler, bevor sie entstehen.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
Der Konstruktor als Türsteher
Ein Konstruktor trägt den Klassennamen und wird bei new ausgeführt.
Er sorgt dafür, dass ein Objekt von Anfang an gültig ist.
this unterscheidet Felder von Parametern mit demselben Namen.
public class Konto {
private int stand;
public Konto(int startStand) {
if (startStand < 0) {
throw new IllegalArgumentException("Start darf nicht negativ sein");
}
this.stand = startStand;
}
}private, Getter und Setter
private macht ein Feld von außen unsichtbar.
Andere Klassen müssen über Methoden zugreifen.
Getter lesen den Wert, Setter ändern ihn — und können dabei Regeln prüfen. Nicht jedes Feld braucht einen Setter.
public int getStand() {
return stand;
}
public void abheben(int betrag) {
if (betrag <= 0 || betrag > stand) {
throw new IllegalArgumentException("Betrag ungültig");
}
stand -= betrag;
}final, static und gute Grenzen
final bedeutet: Die Referenz wird nur einmal gesetzt.
Bei Objekten kann sich der Inhalt trotzdem ändern.
static gehört zur Klasse, nicht zum einzelnen Objekt. Konstanten wie MAX_PUNKTE sind typische static-final-Felder.
public class Quiz {
public static final int MAX_PUNKTE = 100;
private final String titel;
public Quiz(String titel) {
this.titel = titel;
}
}Vertiefung
Invarianten schützen
Kapselung bedeutet nicht nur private Felder, sondern dass ein Objekt seinen Zustand selbst schützt. Ein Konto darf zum Beispiel nie negativ werden, egal wer welche Methode aufruft.
Ein guter Konstruktor prüft seine Eingaben. Setter sind nicht automatisch Pflicht — oft ist eine fachliche Methode wie einzahlen() besser als ein generisches setGuthaben().
public void einzahlen(int betrag) {
if (betrag <= 0) {
throw new IllegalArgumentException("Betrag muss positiv sein");
}
stand += betrag;
}Merksatz: Kapselung schützt Regeln, nicht nur Felder. Methoden benennen die erlaubten Aktionen fachlich.
Übungsaufgabe
Sicheres Konto
Baue ein Konto mit privatem Guthaben. Einzahlen und Abheben sollen den Stand verändern, aber nie negativ werden lassen.
Das soll dein Programm können
- private int stand
- Konstruktor mit Startguthaben >= 0
- einzahlen und abheben mit Validierung
- getStand() und eine Ausgabe der Aktionen
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
Wirf bei ungültigen Werten IllegalArgumentException. Prüfe beim Abheben, ob der Betrag größer als der Stand ist.
Lösung anzeigen
public class Konto {
private int stand;
public Konto(int start) {
if (start < 0) throw new IllegalArgumentException("Start negativ");
stand = start;
}
public void einzahlen(int betrag) {
if (betrag <= 0) throw new IllegalArgumentException("Betrag positiv");
stand += betrag;
}
public void abheben(int betrag) {
if (betrag <= 0 || betrag > stand) {
throw new IllegalArgumentException("Abhebung ungültig");
}
stand -= betrag;
}
public int getStand() { return stand; }
public static void main(String[] args) {
Konto konto = new Konto(100);
konto.einzahlen(50);
konto.abheben(30);
System.out.println(konto.getStand()); // 120
}
}Warum funktioniert das?
Der Konstruktor und die Methoden prüfen an den Grenzen. Danach kann sich der Rest des Programms darauf verlassen, dass ein Konto nie negativ ist.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Spaßprojekt
Sicheres Konto
Baue ein Konto mit privatem Guthaben, Einzahlen und Abheben. Ein negativer Kontostand darf nicht entstehen.
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.