IT 1 – SS 2011 – Übungsblatt 6 Abzugeben bis 11.5.2011 – 12:00 Uhr Beispiel 6.1 [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. Die Methode changeName() in Student muss 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 6.2 Gegeben sind die Klasse UniAngehoeriger und das Interface Lehrbeauftragter: class UniAngehoeriger { /* Konstruktor, dem der Name des UniAngehoerigen uebergeben wird. */ UniAngehoeriger(String name) {...} /* Liefert die Daten (nicht nur den Namen) des UniAngehoerigen in einem String zurueck. */ public String toString() {...} } interface Lehrbeauftragter { /* Gibt eine Liste mit den Nummern der Lehrveranstaltungen des Lehrbeauftragten zurueck. */ int[] getLVAs(); } Schreiben Sie eine Klasse Professor, die Unterklasse von UniAngehoeriger ist und auch das Interface Lehrbeauftragter implementiert. Diese Klasse soll über einen Konstruktor Professor(String name, int[] lvaListe) verfügen, dem der Name des Professors und die Liste seiner Lehrveranstaltungsnummern übergeben werden. Überschreiben Sie weiters in Professor die Methode toString() von UniAngehoeriger so, dass zusätzlich zu den Daten des Uniangehörigen auch die Nummern der Lehrveranstaltungen des Professors zurückgegeben werden. 1 IT 1 – SS 2011 – Übungsblatt 6 Beispiel 6.3 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 Vogel extends Tier { public Vogel() {} } public class Taube extends Tier { public Taube() {} private void methode1() { Tier tier1 = new Tier(); Tier tier2 = new Taube(); Vogel vogel1 = new Taube(); } } Beispiel 6.4 Gegeben sind die Klasse Person und das Interface InAusbildung: public class Person { /* Konstruktor, dem der Name der Person übergeben wird. */ public Person(String name); /* Liefert den Namen der Person zurueck. */ public String toString(); } interface InAusbildung { /* Liefert 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. 2 IT 1 – SS 2011 – Übungsblatt 6 Beispiel 6.5 Gegeben sind die Klasse Fahrzeug und das Interface PrivateNutzung: class Fahrzeug { /* Konstruktor, dem die Fahrzeugnummer uebergeben wird. */ Fahrzeug(int nummer); /* Erhoeht den Kilometerstand um die gefahrenen km. */ public void fahre(double anzahlKilometer); /* Liefert den Kilometerstand zurueck. */ public double getKilometerstand(); } interface PrivateNutzung { /* Vermerkt die Laenge einer privaten Fahrt. */ void fahrePrivat(double anzahlKilometer); /* Liefert die Summe der privat gefahrenen Kilometer. */ double getSummePrivatfahrten(); } Schreiben Sie eine Klasse Dienstwagen, die Unterklasse von Fahrzeug ist und auch das Interface PrivateNutzung implementiert. Diese Klasse soll über einen Konstruktor Dienstwagen(int nummer, String dienstnehmer) verfügen, dem die Nummer des Fahrzeugs und der Name des Dienstnehmers übergeben wird. Überschreiben Sie in Dienstwagen auch die Methode toString() so, dass die Nummer des Dienstwagens, der Dienstnehmer, und der Kilometerstand zurückgeliefert werden. Achten Sie darauf, dass die Methode getKilometerstand() auch für Dienstwägen korrekt funktioniert. 3