Q1 OOP in Java

Das Autohaus

Lösung geprüft

Die Aufgabe der heutigen Stunde ist das Autohaus! Wir haben jetzt eine fertige Klasse Auto vor uns liegen und wollen sie auch endlich mal benutzen. Genau dafür ist das Autohaus da: es ist unsere Spielwiese, auf der wir Autos erzeugen, betanken und fahren lassen.

Wenn du aus der E-Phase kommst, sieht das hier erstmal komisch aus. Wir schreiben nämlich zwei Dateien statt einer. Das ist aber genau der Punkt bei der OOP und garnicht so wild, wenn man es einmal gemacht hat.

classDiagram
    class Auto {
        -String Kennzeichen
        -double Kilometerstand
        -double Tankvolumen
        -double Kraftstoffverbrauch
        -double Kraftstoffmenge
        +Auto(String, double, double)
        +getKennzeichen() String
        +getKilometerstand() double
        +getKraftstoffmenge() double
        +tanken(double) void
        +fahren(double) void
    }
    class Autohaus {
        +main(String[]) void
    }
    Autohaus ..> Auto : erzeugt mit new
Wie Auto und Autohaus zusammenhängen
Die Aufgabenstellung lautet

Erzeuge eine neue Klasse Autohaus im JavaEditor über Datei > Neu > Console. Speichere die Klasse im gleichen Ordner, wie die Klasse Auto. Nenne die Datei Autohaus.java. Trage deinen Namen als Autor ein.

Dazu kam in der Stunde noch das Beispiel an der Tafel: in main ein Auto erzeugen, es betanken und fahren lassen, und am Ende den Kilometerstand ausgeben. Genau das bauen wir jetzt.

Was wir schon haben

Die Klasse Auto ist vorgegeben. Wichtig sind für uns vor allem zwei Stellen: der Konstruktor, weil der uns sagt was wir beim Erzeugen angeben müssen, und die beiden Methoden tanken und fahren ganz unten, in denen noch // TODO steht.

Auto.java (vorgegeben)
/* meininfokurs.cmrg.site */
public class Auto {

// Anfang Attribute
private String Kennzeichen;
private double Kilometerstand;
private double Tankvolumen;
private double Kraftstoffverbrauch;
private double Kraftstoffmenge;
// Ende Attribute

//Konstruktor
public Auto(String Kennzeichen, double Tankvolumen, double Kraftstoffverbrauch) {
  this.Kennzeichen = Kennzeichen;
  this.Tankvolumen = Tankvolumen;
  this.Kraftstoffverbrauch = Kraftstoffverbrauch;
  Kilometerstand = 0;
  Kraftstoffmenge = 0;
}

// Anfang Methoden
public String getKennzeichen() {
  return Kennzeichen;
}

public double getKilometerstand() {
  return Kilometerstand;
}

public double getKraftstoffmenge() {
  return Kraftstoffmenge;
}

public void tanken(double Menge) {
  // TODO
}

public void fahren(double Strecke) {
  // TODO
}
// Ende Methoden
}

Lösungsprozess der Aufgabe

Autohaus.java
/* meininfokurs.cmrg.site */
/**
 *
 * Das fertige Java Programm des Autohauses
 *
 * @version 1.0 vom 13.09.2025
 * @meininfokurs.cmrg.site
 */

public class Autohaus {

  public static void main(String[] args) {

    // Ein neues Auto. Die drei Werte gehen an den Konstruktor:
    // Kennzeichen, Tankvolumen (Liter), Kraftstoffverbrauch (L pro 100 km)
    Auto meinAuto = new Auto("WI-AB 123", 50, 6.5);

    meinAuto.tanken(20);    // 20 Liter in den Tank
    meinAuto.fahren(100);   // 100 Kilometer fahren

    System.out.println("Kilometerstand: " + meinAuto.getKilometerstand());

  } // end of main

} // end of class Autohaus

In der Aufgabenstellung wird gefordert, dass wir folgende Sachen umsetzen:

  1. Eine neue Konsolen-Klasse Autohaus anlegen, im selben Ordner wie Auto.java
  2. Den Kommentarkopf ausfüllen und den eigenen Namen als Autor eintragen
  3. Die main-Methode als Startpunkt schreiben
  4. Ein Objekt der Klasse Auto erzeugen
  5. Das Auto betanken und fahren lassen
  6. Den Kilometerstand in der Konsole ausgeben
  7. Verstehen, warum der Kilometerstand trotzdem 0 bleibt

Die Klasse anlegen

Im JavaEditor gehst du auf Datei > Neu > Console und speicherst die Datei als Autohaus.java. Achte wirklich darauf, dass sie im gleichen Ordner liegt wie Auto.java. Wenn die beiden Dateien in verschiedenen Ordnern liegen, findet Java die Klasse Auto nicht und du bekommst beim Kompilieren ein cannot find symbol um die Ohren gehauen. Das ist einer der häufigsten Fehler bei dieser Aufgabe.

Der Kommentarkopf

Ganz oben steht ein mehrzeiliger Kommentar. Der fängt mit /* an und hört mit */ auf, und dazwischen gehört in jede Zeile ein Stern an den Anfang. Alles was dadrin steht wird beim Ausführen komplett ignoriert, es ist also nur für uns Menschen da. Hinter @author kommt dein Name.

Die main-Methode

Die main-Methode ist der Startpunkt von jedem Java Programm. Ohne sie passiert beim Ausführen einfach nichts. Die vier Wörter davor sehen nach viel aus, jedes hat aber seinen Grund:

WortWas es bedeutet
publicDie Methode ist von überall aufrufbar.
staticSie gehört zur Klasse selbst und nicht zu einem Objekt. Nur deshalb kann die JVM sie starten, ohne vorher ein Autohaus-Objekt zu bauen.
voidSie gibt keinen Wert zurück.
String[] argsEin Array, über das man dem Programm beim Start noch Werte mitgeben könnte. Brauchen wir hier nicht.

Die Kommentare // end of main und // end of class Autohaus musst du nicht schreiben, aber sie helfen dir später enorm. Wenn du fünf verschachtelte Klammern zumachst, siehst du damit sofort welche Klammer zu was gehört.

Ein Objekt erzeugen

Jetzt der eigentlich spannende Teil. Bis jetzt hatten wir mit Auto nur den Bauplan. Ein Bauplan kann aber nicht fahren. Mit new bauen wir aus dem Bauplan ein echtes Auto:

Auto meinAuto = new Auto("WI-AB 123", 50, 6.5);

Warum genau diese drei Werte? Weil der Konstruktor in der Klasse Auto genau die drei haben will: Auto(String Kennzeichen, double Tankvolumen, double Kraftstoffverbrauch). Die Reihenfolge ist dabei fest. Wenn du die drehst, meckert der Compiler entweder wegen der Datentypen, oder er meckert nicht und dein Auto hat plötzlich 6,5 Liter Tank und verbraucht 50 Liter auf 100 km. Der Kilometerstand und die Kraftstoffmenge werden wir nicht mitgeben, die setzt der Konstruktor selbst auf 0. Macht ja auch Sinn, ein neues Auto ist leer und ungefahren.

meinAuto ist übrigens nur der Name, den wir uns ausdenken. Du kannst das Ding auch a1 nennen. Sprechende Namen sind aber nie verkehrt.

Methoden aufrufen und ausgeben

Ab hier arbeiten wir immer über den Punkt. Links vom Punkt steht das Objekt, rechts davon was es machen soll:

meinAuto.tanken(20);
meinAuto.fahren(100);

System.out.println("Kilometerstand: " + meinAuto.getKilometerstand());

tanken und fahren sind Prozeduren, die geben nichts zurück. getKilometerstand() ist dagegen eine Funktion, die liefert uns einen double zurück, und den können wir mit dem + direkt an unseren Text dranhängen. Das nennt sich Konkatenation.

Warum trotzdem nichts passiert

Und jetzt kommt der Teil, über den in der Stunde die halbe Klasse gestolpert ist. Du führst das Programm aus, es kompiliert sauber, es läuft durch, und dann steht da:

Konsole
Kilometerstand: 0.0

Wir haben getankt und sind 100 km gefahren, und trotzdem steht der Kilometerstand auf 0. Kaputt ist deswegen aber nichts. Schau nochmal in die Klasse Auto: in tanken und fahren steht nur // TODO drin, also nichts. Wir rufen also zwei Methoden auf, die brav aufgerufen werden und dann einfach nichts tun.

Das ist der Unterschied zwischen einem Syntaxfehler und einem semantischen Fehler. Die Syntax stimmt hier komplett, deshalb beschwert sich der Compiler auch nicht. Der Code macht nur nicht das, was er machen soll. Diese Sorte Fehler ist die fiesere von beiden, weil dir niemand sagt dass was falsch ist, du musst selber drauf kommen :)

Die beiden Methoden füllen wir in der nächsten Aufgabe.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung