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!