1. java-hell.de
  2. Themen
  3. Klassen & Objekte
Thema 8 von 11

Java Klassen & Objekte lernen – OOP üben

Jetzt wird es objektorientiert. Du baust deine erste Klasse, schreibst einen Konstruktor, gibst Objekten eigene Methoden und lässt Klassen voneinander erben – das Fundament von fast jedem Java-Projekt.

Die Übungen

Das lernst du in diesem Thema

  1. Deine erste Klasse
  2. Konstruktor
  3. Methode in Klasse
  4. Vererbung
Übung 1 von 4

Deine erste Klasse

Eine Klasse ist ein Bauplan für Objekte:

class Hund {
    String name;
}

Ein Objekt erstellst du mit new:

Hund h = new Hund();
h.name = "Bello";

Setze die marke des Autos auf BMW, bevor es ausgegeben wird.

Startcode
void main() {
    Auto a = new Auto();
    // Setze a.marke auf "BMW"
    IO.println(a.marke);
}

class Auto {
    String marke;
}
Hintergrund
OOP — Objektorientierte Programmierung

Java ist eine objektorientierte Sprache. Die Idee: Du modellierst die Welt als Objekte mit Eigenschaften (Felder) und Verhalten (Methoden). Ein Auto hat eine marke und kann fahren().

Die vier Säulen der OOP: Abstraktion, Kapselung, Vererbung und Polymorphie. Die lernst du Schritt für Schritt kennen.

Übung 2 von 4

Konstruktor

Statt Werte einzeln zu setzen, nutzt du einen Konstruktor — eine spezielle Methode die beim Erstellen aufgerufen wird:

class Hund {
    String name;
    Hund(String name) {
        this.name = name;
    }
}

this.name = das Feld der Klasse. name = der Parameter.

Ergänze den Konstruktor der Klasse Auto.

Startcode
void main() {
    Auto a = new Auto("Tesla");
    IO.println(a.marke);
}

class Auto {
    String marke;

    Auto(String marke) {
        // Setze this.marke auf den Parameter marke
    }
}
Hintergrund
this — die Selbstreferenz

this verweist auf das aktuelle Objekt. Im Konstruktor brauchst du this.marke = marke;, weil der Parameter marke den gleichen Namen hat wie das Feld. Ohne this würde Java denken, du weist die Variable sich selbst zu.

Tipp: Viele Java-Entwickler benennen Parameter bewusst gleich wie die Felder und nutzen this. — das ist gängiger Stil.

Übung 3 von 4

Methode in Klasse

Klassen können eigene Methoden haben:

class Hund {
    String name;
    String bellen() {
        return name + " sagt Wuff!";
    }
}

Die Methode kann auf die Felder der Klasse zugreifen — ohne Parameter.

Ergänze die Methode info(): Sie soll [marke], [ps] PS zurückgeben.

Startcode
void main() {
    Auto a = new Auto("BMW", 150);
    IO.println(a.info());
}

class Auto {
    String marke;
    int ps;

    Auto(String marke, int ps) {
        this.marke = marke;
        this.ps = ps;
    }

    String info() {
        // Gib "[marke], [ps] PS" zurueck
        return "";
    }
}
Hintergrund
toString() — die universelle Methode

Jede Klasse in Java erbt von Object und hat eine toString() Methode. Wenn du println(objekt) aufrufst, wird automatisch objekt.toString() aufgerufen.

Ohne eigene toString() bekommst du sowas wie Auto@1a2b3c — den Klassennamen + den Hashcode des Objekts in Hex (keine Speicheradresse, auch wenn es so aussieht). Deshalb überschreibt man toString() fast immer.

Übung 4 von 4

Vererbung

Eine Klasse kann von einer anderen erben — sie übernimmt alle Felder und Methoden:

class Tier { String name; }
class Hund extends Tier { String rasse; }

Hund hat jetzt name (von Tier geerbt) und rasse.

Im Konstruktor rufst du super() auf, um den Konstruktor der Elternklasse auszuführen.

Ergänze den Konstruktor von EAuto: Rufe super(marke) auf und setze reichweite.

Startcode
void main() {
    EAuto e = new EAuto("Tesla", 500);
    IO.println(e.marke + ", " + e.reichweite + " km");
}

class Auto {
    String marke;
    Auto(String marke) { this.marke = marke; }
}

class EAuto extends Auto {
    int reichweite;

    EAuto(String marke, int reichweite) {
        // Rufe super(marke) auf
        // Setze this.reichweite
    }
}
Hintergrund
Vererbung und die Klassenhierarchie

In Java kann eine Klasse nur von einer Klasse erben (Single Inheritance). Für "Mehrfachvererbung" gibt es Interfaces — abstrakte Verträge die eine Klasse implementieren kann.

Lange Zeit musste super() die allererste Anweisung im Konstruktor sein. Seit Java 25 darfst du ein paar Anweisungen davor schreiben (z. B. Parameter prüfen), solange sie nicht auf this zugreifen. Das Prinzip bleibt: Der Elternteil des Objekts wird initialisiert, bevor die Kindklasse mit ihren eigenen Feldern arbeitet. super() an den Anfang zu schreiben ist weiterhin der übliche Stil.

Genug gelesen. Jetzt du.

Im Tutorial schreibst du den Code selbst, drückst auf Ausführen und siehst sofort, ob dein Programm stimmt. Kein JDK, keine IDE, kein Bullshit.

Klassen & Objekte im Browser üben