8. Die Subklasse Lkw

Die Klasse Lkw ist wie Pkw eine Subklasse von Kfz.

public class Lkw extends Kfz {...

Attribute

Lkw erhält die beiden Attribute ladungMax (= das maximale Ladungsgewicht in kg) und ladung (das aktuelle Ladungsgewicht in kg).

public class Lkw extends Kfz {
  
  private int ladungMax;
  private int ladung;

Konstruktor

Der Konstruktor wird analog zum Konstruktor der Klasse Pkw geschrieben.

public Lkw(String marke, int tankMax, double verbrauch, int ladungMax) {
  super(marke, tankMax, verbrauch);
  this.ladungMax = ladungMax;
  this.ladung = 0;
  System.out.println("(Typ LKW, maximale Ladung " + this.ladungMax + " kg)");
}

Getter und Setter

Auch die Getter- und Setter-Methoden für ladungMax und ladung werden analog zur Klasse Pkw geschrieben.

Der Setter setLadung() wird gleich die Kontrollstruktur zur Verhinderung von zu kleinen oder zu großen Werten eingebaut.

public int getLadungMax() {
  return this.ladungMax;
}

public int getLadung() {
  return this.ladung;
}

public void setLadung(int ladung) {
  if (ladung >= 0 && ladung <= this.ladungMax) {
    this.ladung = ladung;
  }
}

Die Methode beladen()

Die Methode beladen() bewirkt, dass eine bestimmte Menge an Ladung dem Lkw-Objekt hinzugefügt wird. Diese Zuladung wird dann zum Attribut ladung addiert.

Zunächst wird die noch mögliche Zuladung berechnet mit this.ladungMax minus this.ladung, das Ergebnis wird in der Variablen nochMoeglich gespeichert. Die Werte für die maximale Gesamtladung, die noch mögliche Zuladung und die geplante Zuladung werden ausgegeben.

Nur wenn der Wert von zuladung im gültigen Bereich ist (≥ 0 und ≤ nochMoeglich), wird der Wert von ladung aktualisiert. Anschließend wird der neue Wert von ladung ausgegeben.

public void beladen(int zuladung) {
  System.out.println("---------------------------------");
  System.out.println("Ladungsvorgang " + marke + ":");
  
  int nochMoeglich = this.ladungMax - this.ladung;
  
  System.out.println("maximale Gesamtladung : " + this.ladungMax + " kg");
  System.out.println("moegliche Zuladung    : " + nochMoeglich + " kg");
  System.out.println("geplante Zuladung     : " + zuladung + " kg");
  
  if (nochMoeglich < zuladung) {
    System.out.println("LADUNG NICHT MOEGLICH: zu schwer!");
  }
  else if (zuladung < 0) {
    System.out.println("NICHT MOEGLICH: negatives Ladungsgewicht!");
  }

  else {
    this.ladung += zuladung;
    System.out.println("Ladung aktuell        : " + this.ladung + " kg");
  }
}

Klasse Verkehr

In der Klasse Verkehr können nun Pkw- und Lkw-Objekte erzeugt werden. An diesen werden ihre von Kfz geerbten Methoden und ihre eigenen Methoden aufgerufen.

public class Verkehr {  
  public static void main(String[] args) {
    
    Pkw pkw1 = new Pkw("Audi", 60, 5, 5);
    pkw1.tanke(20);
    pkw1.einsteigen(4);
    pkw1.fahre(390);

    Lkw lkw1 = new Lkw("Iveco", 250, 25, 3000);
    lkw1.tanke(100);
    lkw1.beladen(1350);
    lkw1.fahre(280);
  }
}

Ausführen der Klasse Verkehr führt zur Konsolenausgabe:

---------------------------------
Objekterstellung Audi
(60 Liter-Tank, Verbrauch 5.0 Liter auf 100 km)
(Typ PKW, 5 Sitzplaetze)
---------------------------------
Tankvorgang Audi:
Maximale Tankmenge    : 60.0 Liter
Gewuenschte Tankmenge : 20 Liter
Getankt               : 20 Liter
neuer Tankstand       : 20.0 Liter
---------------------------------
Einsteigevorgang Audi:
Sitzplaetze           : 5
Freie Plaetze         : 5
Einsteiger            : 4
Mitfahrer aktuell     : 4
---------------------------------
Fahrtvorgang Audi:
Tankstand             : 20.0 Liter
Maximale Fahrtstrecke : 400.0 km
Geplante Fahrtstrecke : 390 km
Streckenverbrauch     : 19.5 Liter
neuer Km-Stand        : 390 km
neuer Tankstand       : 0.5 Liter
---------------------------------
Objekterstellung Iveco
(250 Liter-Tank, Verbrauch 25.0 Liter auf 100 km)
(Typ LKW, maximale Ladung 3000 kg)
---------------------------------
Tankvorgang Iveco:
Maximale Tankmenge    : 250.0 Liter
Gewuenschte Tankmenge : 100 Liter
Getankt               : 100 Liter
neuer Tankstand       : 100.0 Liter
---------------------------------
Ladungsvorgang Iveco:
maximale Gesamtladung : 3000 kg
moegliche Zuladung    : 3000 kg
geplante Zuladung     : 1350 kg
Ladung aktuell        : 1350 kg
---------------------------------
Fahrtvorgang Iveco:
Tankstand             : 100.0 Liter
Maximale Fahrtstrecke : 400.0 km
Geplante Fahrtstrecke : 280 km
Streckenverbrauch     : 70.0 Liter
neuer Km-Stand        : 280 km
neuer Tankstand       : 30.0 Liter

Das Programm arbeitet nun wie gewünscht:

  • Jedem Objekt stehen die Methoden seiner Klasse sowie die geerbten Methoden der Superklasse Kfz zur Verfügung.
  • Nur gültige Parameter-Werte werden in den Methoden verarbeitet. Ungültige Werte werden mit einem entsprechenden Warnhinweis abgelehnt.
  • Wir haben darauf geachtet, dass keine inkonsistenten Daten in den Attributen gespeichert werden: wenn z.B. eine Fahrt nicht ausgeführt wird, weil das Benzin nicht ausreicht, wird weder der Tankstand noch der km-Stand geändert.

Damit ist das Projekt abgeschlosssen!