6. Die Subklasse Pkw
Die KLasse Pkw
ist eine Subklasse von Kfz
. Das wird in der Klassendefinition durch das Schlüsselwort extends
festgelegt.
public class Pkw extends Kfz {...
Attribute
Pkw erhält 2 Attribute: sitzplaetze
speichert die Anzahl der Sitzplätze im Auto, mitfahrer
speichert die Anzahl der Personen, die im Auto sitzen. Beide Attribute sind natürlich vom Typ int
.
public class Pkw extends Kfz {
private int sitzplaetze;
private int mitfahrer;
Konstruktor
Der Konstruktor benötigt alle Parameter, die auch der Konstruktor von Kfz braucht, plus den Parameter sitzplaetze
.
Als erstes wird der Konstruktor der Superklasse mit dem Schlüsselwort super()
aufgerufen. Die im Kfz
-Konstruktor benötigten Parameter-Werte marke
, tankMax
und verbrauch
werden einfach an super()
"durchgereicht".
Danach werden die Pkw
-eigenen Attribute sitzplaetze
und mitfahrer
gesetzt. mitfahrer
ist zu Anfang immer 0, ein neu erzeugtes Pkw
-Objekt ist zu Beginn also leer.
Zum Schluss wird noch eine Information ausgegeben, damit man sieht, dass ein Objekt der Klasse Pkw
mit einer bestimmten Sitzplatz-Anzahl erstellt wurde:
public Pkw(String marke, int tankMax, double verbrauch, int sitzplaetze) {
super(marke, tankMax, verbrauch);
this.sitzplaetze = sitzplaetze;
this.mitfahrer = 0;
System.out.println("(Typ PKW, " + sitzplaetze + " Sitzplaetze)");
}
Getter und Setter
Das Attribut sitzplaetze
wird mit dem Aufruf des Konstruktors für ein Objekt festgelegt und kann nicht mehr geändert werden. Deshalb erhält sitzplaetze
nur die Getter-Methode.
Das Attribut mitfahrer
muss sowohl gelesen als auch geändert werden können und erhält deshalb einen Getter und einen Setter.
public int getSitzplaetze() {
return this.sitzplaetze;
}
public int getMitfahrer() {
return this.mitfahrer;
}
public void setMitfahrer(int mitfahrer) {
this.mitfahrer = mitfahrer;
}
Die Methode einsteigen()
Die Methode einsteigen()
bewirkt, dass eine bestimmte Anzahl Personen in das Pkw
-Objekt einsteigen. Die Anzahl der Personen wird im Parameter personen
festgelegt. Dadurch wird die Anzahl der Mitfahrer erhöht. Das Attribut mitfahrer
muss also aktualisiert werden.
Zum Schluss wird die neue Anzahl der Mitfahrer ausgegeben.
public void einsteigen(int personen) {
System.out.println("---------------------------------");
System.out.println("Einsteigevorgang " + this.marke + ":");
System.out.println("Einsteiger : " + personen);
this.mitfahrer += personen;
System.out.println("Mitfahrer aktuell : " + this.mitfahrer);
}
Klasse Verkehr
In der Klasse Verkehr wird die neue Subklasse ausprobiert:
Zuerst wird ein Pkw
-Objekt erzeugt.
Dann werden die geerbten Methoden tanke()
und fahre()
an dem Objekt aufgerufen.
Zum Schluss wird 3 mal die Pkw-Methode einsteigen()
aufgerufen.
public class Verkehr {
public static void main(String[] args) {
Pkw pkw1 = new Pkw("Audi", 60, 5, 5);
pkw1.tanke(20);
pkw1.fahre(250);
pkw1.einsteigen(2);
pkw1.einsteigen(4);
pkw1.einsteigen(-10);
}
}
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 --------------------------------- Fahrtvorgang Audi: Tankstand : 20.0 Liter Maximale Fahrtstrecke : 400.0 km Geplante Fahrtstrecke : 250 km Streckenverbrauch : 12.5 Liter neuer Km-Stand : 250 km neuer Tankstand : 7.5 Liter --------------------------------- Einsteigevorgang Audi: Einsteiger : 2 Mitfahrer aktuell : 2 --------------------------------- Einsteigevorgang Audi: Einsteiger : 4 Mitfahrer aktuell : 6 --------------------------------- Einsteigevorgang Audi: Einsteiger : -10 Mitfahrer aktuell : -4
Die geerbten Methoden funktionieren wie gewohnt.
Die neue Methode einsteigen()
kann wie gewünscht auf das Attribut marke
der Superklasse zugreifen (zu sehen an der Überschrift "Einsteigevorgang ... "). Allerdings nimmt die Methode auch unzulässige Werte an: beim zweiten Aufruf von einsteigen() steigen 4 Personen ein. Dadurch wird der Wert des Attributs mitfahrer größer als sitzplaetze. Beim dritten Aufruf von einsteigen() wird eine negative Personenzahl angegeben.
Dies sind wieder logische Fehler im Programm, die im nächsten Schritt korrigiert werden.