In diesem Abschnitt werden wir eine Möglichkeit kennenlernen, bereits beim Erzeugen eines neuen Objekts bestimmte Attributwerte zu initialisieren.
Beispiel
Einem Objekt der Klasse Buch, das unter dem Objektnamen neuesBuch zu erreichen ist, soll der Titel „Jetzt lerne ich Java“ zugewiesen werden. Dazu wird dessen öffentliche setTitel-Methode aufgerufen und als Argument der entsprechende String übergeben.
Das Attribut titel ist für Objekte der Klasse Buch sehr wichtig. In den meisten Fällen wird nach dem Erzeugen eines neuen Buch-Objekts, diesem ein Titel zugewiesen. Unser Ziel ist es, eine Möglichkeit zu schaffen, bereits beim Erzeugen eines neuen Buch-Objekts dessen Attribut titel zu initialisieren.
Hierzu kann eine besondere Methode erstellt werden, die automatisch beim Erzeugen eines neuen Objekts aufgerufen wird. Die Methode erhält den gleichen Namen wie ihre Klasse – beginnt also ausnahmsweise mit einem Großbuchstaben – und erhält als Argumente die für die ausgewählten Attribute vorgesehenen Initialwerte. Die Angabe eines Rückgabetyps entfällt. Da diese Methode bei der Konstruktion eines neuen Objekts behilflich ist, wird sie als Konstruktor bezeichnet.
Wird in einer Klasse kein bestimmter Konstruktor erstellt, erhält diese automatisch einen parameterlosen Konstruktor, der keinerlei Anweisungen enthält. Sobald jedoch ein Konstruktor erstellt wird, der Parameter erwartet, muss der parameterlose Konstruktor im Quellcode explizit hinzugefügt werden, wenn es weiterhin möglich sein soll, Objekte auch parameterlos zu erzeugen.
Überladen des Konstruktors
Methoden, das heißt auch Konstruktoren, können überladen werden. Dabei werden mehrere Methoden gleichen Namens erstellt, die jedoch unterschiedliche Paramtertypen vorsehen beziehungsweise bei denen sich die Reihenfolge der erwarteten Paramtertypen unterscheidet.
Aufgabe 5-5: Konstruktoren der Klasse Buch
Vervollständigen Sie den bisher erstellten Quellcode der Klasse Buch entsprechend dem folgenden UML-Klassendiagramm (vgl. Abb. 5.18).
Warum darf in der Klasse Buch – so wie sie in Abb. 5.18 modelliert ist – nicht zusätzlich der Konstruktor Buch(pIsbn: String) ergänzt werden?
Lösung
Antwort:
Der Konstruktor Buch(pIsbn: String) hat die gleiche Signatur wie der bereits vorhandene Konstruktor Buch(titel: String), nämlich Buch(String). In einer Klasse darf es zwar mehrere Methoden gleichen Namens geben, diese müssen sich jedoch in ihrer Signatur unterscheiden.
Aufgabe 5-6: Konstruktoren der Klasse Ort
Vervollständigen Sie den bisher erstellten Quellcode der Klasse Ort entsprechend dem folgenden UML-Klassendiagramm (vgl. Abb. 5.20).