IT 1 – WS 2013/2014 – Übungsblatt 5 Informationen: Die Beispiele sind bis 7.11. um 8 Uhr abzugeben bzw. bis zur Übung vorzubereiten. Beispiel 5.1: Gegeben sei eine Klasse Telefon mit Konstruktor Telefon(String nummer), der ein Telefon mit der angegebenen Nummer erzeugt. Die Klasse Telefon verfügt außerdem über die Methode public void anrufen(Telefon andresTelefon), die andresTelefon anruft, sowie eine Methode public String gibNummer(), die die Nummer als String zurückgibt. Schreiben Sie eine Klasse TelefonMitDisplay, die von Telefon erbt. Der Konstruktor TelefonMitDisplay(String nummer) soll ein Telefon mit der angegebenen Nummer und leerem Display erzeugen. Eine Methode public void setDisplay(String sss) soll den String sss ins Display schreiben, eine Methode void loeschen(), soll das Display löschen. Überschreiben Sie in TelefonMitDisplay außerdem die Methode anrufen so, dass im aufrufenden Objekt der Anruf im Display angezeigt wird (z.B. String „Anruf 0664/1234567“). Falls das angerufene Telefon ein Objekt der Klasse TelefonMitDisplay ist, soll im Display der Anruf ebenfalls verzeichnet werden (z.B. String „Anruf von 0664/1234567“). Beispiel 5.2: [LabClass.java, Student.java, Lecturer.java, Person.java] Fügen Sie dem Projekt lab-classes von der Lehrveranstaltungsseite eine Klasse Lecturer hinzu. Diese Klasse hat einen Konstruktor Lecturer(String name), der einen Lecturer mit entsprechendem Namen anlegt. Definieren Sie eine gemeinsame Oberklasse Person für Lecturer und Student. Verwenden Sie Vererbung zur Vermeidung von Code-Duplizierung zwischen Student und Lecturer (beide haben einen Namen). Dazu sind in der Klasse Student einige Änderungen nötig. Z.B. muss die Methode changeName() in Student entfernt werden. Ändern Sie die Klasse LabClass so, dass der Instruktor ein Lecturer ist. Ersetzen Sie insbesondere die Methode setInstructor(String instructorName) durch eine Methode setInstructor(Lecturer theLecturer). Fügen Sie auch eine entsprechende Methode Lecturer getInstructor() hinzu. Definieren Sie in der Klasse Person die Methode public String toString() so, dass die Methode printList() in LabClass nicht geändert werden muss. Die Methode toString() soll in Lecturer nicht überschrieben werden. Beispiel 5.3: Schreiben Sie eine Klasse Datum mit dem Konstruktor Datum(int jahr, int monat, int tag). Fügen Sie in der Klasse Zeitpunkt aus Beispiel 2.3 einen Konstruktor Zeitpunkt(Datum tag, int stunde, int minute) hinzu. Überschreiben Sie in den Klassen Datum und Zeitpunkt die Methode public boolean equals(Object obj). Zwei Instanzen von Datum bzw. Zeitpunkt sollen genau dann gleich sein, wenn alle Attribute gleich sind. 1 IT 1 – WS 2013/2014 – Übungsblatt 5 Beispiel 5.4: Gegeben sind die folgenden Klassendefinitionen. Welche der angegebenen Anweisungen in methode1() führen zu Compiler-Fehlern? Warum? public abstract class Tier { public Tier() {} } public class Raubkatze extends Tier { public Raubkatze() {} } public class Tiger extends Tier { public Tiger() {} private void methode1() { Tier tier1 = new Raubkatze(); Raubkatze mitzi = new Tiger(); Tier tier2 = new Tiger(); } } Beispiel 5.5: Gegeben sind die Klasse Person und das Interface InAusbildung: public class Person { /* Konstruktor, dem der Name der Person übergeben wird.*/ public Person(String name); /* gibt den Namen der Person zurück. */ public String toString(); } interface InAusbildung { /* gibt den Namen der Ausbildung zurueck. */ String getAusbildung(); } Schreiben Sie eine Klasse Student, die Unterklasse von Person ist und auch das Interface InAusbildung implementiert. Diese Klasse soll über einen Konstruktor Student(String name, String matrikelnummer, String studium) verfügen, dem der Name des Studenten, seine Matrikelnummer und der Name des Studiums übergeben werden. Überschreiben Sie in Student die Methode toString(), sodass zusätzlich zum Namen auch die Matrikelnummer zurückgeliefert wird. Die Methode getAusbildung() soll den Namen des Studiums zurückliefern. Beispiel 5.6: [Urne.java] Schreiben Sie eine Klasse Urne, deren Objekte Urnen darstellen sollen, aus denen zufällig rote und blaue Bälle gezogen werden. • Es gibt einen Konstruktor Urne(int anzahlRot, int anzahlBlau), der eine Urne erzeugt, die zu Beginn anzahlRot viele rote und anzahlBlau viele blaue Bälle enthält. • Die Methode String nextBall() liefert einen roten oder einen blauen Ball, dargestellt durch die Strings "rot" bzw. "blau". Dieser Ball wird zufällig aus den Bällen ausgewählt, die sich noch in der Urne befinden. Der ausgewählte Ball wird aus der Urne entfernt. Falls sich in der Urne keine Bälle mehr befinden, liefert die Methode nextBall() den Wert null. 2