Die Aufgabe
Aufgabe 4
a) Programmieren Sie eine Klasse „Kapitaen“ mit den String-Attributen vorname und nachname und dem kanonischen Konstruktor, der beide Attribute mit Werten versieht. Zudem soll die Methode getNachname( ) erstellt werden.
Programmieren Sie eine zweite Klasse Schiff mit dem Attribut name und einem weiteren Attribut kapitaen, dem ein Kapitaen-Objekt zugewiesen werden soll. Auch diese Klasse soll einen kanonischen Konstruktor besitzen. Weiterhin soll eine toString-Methode hinzugefügt werden, die einen String mit dem Namen des Schiffs und dem Nachnamen des Kapitäns zurückgibt (und hierfür die Methode „getNachname“ aufruft.).
Legen Sie nun in der main-Methode einer weiteren Klasse einen Kapitaen und ein Schiff mit Namen und Kapitaen an und erzeugen Sie eine Ausgabe auf der Konsole.
Erzeugen Sie in der main-Methode ein zweites Schiff-Objekt. Übergeben Sie dem Konstruktor den Wert null anstelle eines Kapitaen-Objekts. Erzeugen Sie ebenfalls eine Ausgabe auf der Konsole und schauen Sie, was passiert.
b) Behandeln Sie nun die Exception in der toString-Methode von „Schiff“. Der Benutzer soll beim Auftreten dieser Exception darüber informiert werden, dass kein Kapitaen angegeben ist, und es soll in diesem Fall nur der Name des Schiffs ausgegeben werden.
c) Nun soll verhindert werden, dass man überhaupt ein Schiff anlegen kann ohne ihm ein richtiges Kapitaen-Objekt zu übergeben. Hierzu soll der Konstruktor von Schiff eine IllegalArgumentException werfen. Ändern Sie den Konstruktor und testen Sie den geänderten Code.
Zwei Klassen: Kapitaen mit Vor- und Nachname, Schiff mit Name und Kapitän. toString von Schiff fragt den Kapitän nach seinem Nachnamen. Ohne Kapitän geht das schief. Die drei Teile zeigen drei Antworten darauf.
Zwei kleine Abweichungen von der Musterlösung: Die Ausgabe schreibt „Kapitän“ statt „Kapitaen“. In Teil c) prüft der Konstruktor den Kapitän vor den Zuweisungen; das Ergebnis ist dasselbe, weil bei null ohnehin kein Schiff entsteht.
null aufzurufen, löst eine NullPointerException aus. Besser als sie abzufangen ist oft, den ungültigen Wert gar nicht erst anzunehmen.- a) Klassen schreiben, Schiff mit und ohne Kapitän ausgeben: Absturz.
- b) Die Ausnahme in toString abfangen und einen Hinweis ausgeben.
- c) Im Konstruktor ein Schiff ohne Kapitän verbieten.