Die Klasse Auto
Lösung geprüft
Die Aufgabe der heutigen Stunde ist unsere erste eigene Klasse! Bis jetzt haben wir alles in eine einzige Datei geschrieben und von oben nach unten abgearbeitet. Damit ist jetzt Schluss. Ab hier bauen wir Baupläne und machen daraus Objekte.
Bevor wir irgendwas tippen: was wollen wir überhaupt modellieren? Modellieren heißt, von den ganzen Details eines echten Autos wegzugehen und nur das aufzuschreiben, was für unseren Zweck wichtig ist. Unsere Autos sollen betankt werden und fahren können, mehr nicht. Also brauchen wir auch nur das, was dafür nötig ist: Kennzeichen, Kilometerstand, Tankvolumen, Kraftstoffverbrauch und Kraftstoffmenge. Die Farbe interessiert uns nicht, die Anzahl der Türen auch nicht.
Schreibe den Code mit dem Java-Editor und speichere die Datei hier ab.
Lösungsprozess der Aufgabe
/**
*
* Die Klasse Auto
*
* @version 1.0 vom 13.09.2025
* @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
}
In der Aufgabenstellung wird gefordert, dass wir folgende Sachen umsetzen:
- Eine Klasse
Autoanlegen - Die fünf Attribute deklarieren und auf
privatesetzen - Einen Konstruktor schreiben, der Kennzeichen, Tankvolumen und Kraftstoffverbrauch entgegennimmt
- Getter für die Werte schreiben, die man von außen lesen können soll
- Die beiden Methoden
tankenundfahrenanlegen – erstmal leer
Die Attribute
Die fünf Attribute stehen ganz oben und beschreiben, was ein Auto bei uns überhaupt ausmacht. Jedes Objekt, das wir später aus dieser Klasse bauen, bekommt seinen eigenen Satz dieser Werte. Zwei Autos teilen sich also keinen Kilometerstand, jedes hat seinen eigenen.
private String Kennzeichen;
private double Kilometerstand;
private double Tankvolumen;
private double Kraftstoffverbrauch;
private double Kraftstoffmenge;
Warum überall private? Weil von außen niemand einfach so
an diesen Werten rumschrauben soll. Wenn der Kilometerstand
public wäre, könnte jeder von außen
meinAuto.Kilometerstand = 1000000; schreiben, ohne je
gefahren zu sein. Genau das wollen wir nicht. Wer den Kilometerstand
ändern will, muss gefälligst fahren benutzen. Das nennt
sich Kapselung und ist einer der Gründe, warum man überhaupt
objektorientiert programmiert.
Kennzeichen ist ein String, weil da Buchstaben
drin vorkommen. Alles andere ist double, weil ein
Kilometerstand oder eine Tankfüllung durchaus Nachkommastellen haben
kann.
Der Konstruktor
Der Konstruktor ist die Methode, die läuft, wenn wir mit
new ein neues Auto bauen. Er heißt genau so wie
die Klasse und hat keinen Rückgabetyp – kein
void, gar nichts. Das ist das Erkennungszeichen eines
Konstruktors.
public Auto(String Kennzeichen, double Tankvolumen, double Kraftstoffverbrauch) {
this.Kennzeichen = Kennzeichen;
this.Tankvolumen = Tankvolumen;
this.Kraftstoffverbrauch = Kraftstoffverbrauch;
Kilometerstand = 0;
Kraftstoffmenge = 0;
}
Hier stolpern erfahrungsgemäß die meisten: der Parameter heißt
Kennzeichen und das Attribut heißt auch
Kennzeichen. Woher weiß Java, welches gemeint ist?
Gar nicht – deshalb gibt es this. Innerhalb der Methode
gewinnt immer der Parameter, der ist näher dran. this.Kennzeichen
heißt ausdrücklich „das Attribut von diesem Objekt hier".
this.Kennzeichen = Kennzeichen; liest sich also als:
schreib den übergebenen Wert in mein eigenes Attribut. Ohne
this würdest du den Parameter sich selbst zuweisen und das
Attribut bliebe leer. Der Compiler meckert dabei nicht mal, das
Programm tut nur nichts.
Kilometerstand und Kraftstoffmenge werden nicht mitgegeben, die setzt der Konstruktor selbst auf 0. Ein frisch gebautes Auto ist eben leer und ungefahren.
Die Getter
Weil die Attribute private sind, kommt von außen niemand
ran. Wir wollen den Kilometerstand aber später ausgeben können. Dafür
gibt es Getter – kleine Methoden, die nichts weiter tun als den Wert
zurückzugeben:
public double getKilometerstand() {
return Kilometerstand;
}
Das sieht nach unnötiger Tipparbeit aus, ist es aber nicht. Der Punkt ist, dass wir entscheiden, was nach außen geht. Für Tankvolumen und Kraftstoffverbrauch gibt es hier absichtlich keinen Getter – die braucht von außen gerade niemand.
Die beiden leeren Methoden
Ganz unten stehen tanken und fahren, und in
beiden steht nur // TODO. Das ist Absicht. Die Gerüste
sind schon da, damit die Klasse durchkompiliert und wir sie benutzen
können – gefüllt werden sie erst in einer späteren Aufgabe.
Beide sind void, geben also nichts zurück. Sie ändern nur
den Zustand des Objekts. So etwas nennt man Prozedur, im Gegensatz zu
einer Funktion wie getKilometerstand(), die einen Wert
liefert. In Java heißt beides Methode.