Lab-03 — Abtrakte Klassen und Interfaces
Theorie dazu:
Exceptions und Interfaces werden morgen im Unterricht weiter besprochen.
Erweitere Lab-02 — Vererbung: Mitarbeiter, Firma um die nachfolgend beschriebenen Themen. Erstelle eine Kopie des Lab-02-Projekts mit neuem Namen. Nimm folgende Ergänzungen vor:
1. Umwandeln aller Fehlermeldungen auf Checked Exceptions
Anstelle von Fehlermeldungen verwende checked Exceptions (BadParamException
, bei Bedarf weitere).
Wenn sinnvoll, zur Anreicherung mit Kontext-Information die Exception "rethrow"-en.
Z.B. in Settern ist das betroffene Objekt oft nicht identifizierbar, wenn keine weiteren Attribute gezeigt werden – in aufrufenden Methoden (z.B. Konstruktor) Exception "catchen", neu werfen mit Kontext-Info in der Message. "Cause" liefert die Details zur ursprünglichen Exception.
2. Umwandeln der Klasse 'Mitarbeiter' auf abstrakt, Zusatzattribut 'einstellDatum'
Wandle die Klasse auf abstrakt um und mache Methode berechneGehalt() : float
zu einer abstrakten Methode.
Ergänze um das Attribut (Typ java.time.LocalDate
) einstellDatum
- auch bei toString().
public class DemoLocalDateAndFormat {
public void formatDemo() {
// https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Formatter.html
String s = String.format("String:%s, Ganzzahl:%d, Nichtganzzahl:%f (formatiert: %06.3f), Char:%c, Boolean:%B",
"Hallo", -999, 3.1415926, Math.sqrt(2), 'x', true);
System.out.println(s);
}
public void localDateDemo() {
LocalDate now = LocalDate.now();
LocalDate someDate = LocalDate.of(2002, 02, 22);
System.out.format("Jahre zwischen %TF und %TF: %d%n", // T .. time-prefix, F .. Full ISO Date
now, someDate, (now.getYear() - someDate.getYear()));
System.out.println("Heute ist %TF".formatted(LocalDate.now()));
}
}
3. Definition von Interface 'Fachgebiete', Implementieren durch Mitarbeiterklassen
Die Mitarbeiterklassen sind um eine Schnittstelle Fachgebiete
zu erweitern, die es ermöglicht für einen Mitarbeiter fachliche Erfahrungen, Kurse, … zu speichern bzw. abzufragen und folgende Methoden vorsieht:
-
besucheSchulung(String fachgebiet)
… erweitert die Kenntnisse des Mitarbeiters um ein Fachgebiet -
alleFachgebiete() : String[]
… liefert alle Fachgebiete (Qualifikationen) des Mitarbeiters -
qualifiziertFuer(String fachgebiet) : boolean
… prüft, ob ein bestimmtes Fachgebiet zu den Qualifikationen eines Mitarbeiters gehört.- Achtung
-
Dafür erforderliche Attribute / Methoden sind in den obigen Klassen so einzufügen, dass möglichst wenige Erweiterungen erforderlich sind.
4. Definition von Interface 'Sonderform', Implementieren durch 'TeilzeitAngestellter' und 'WerksvertragsAngestellter'
Dieses Interface definiert keinerlei eigene Zusatzmethoden oder Konstante, es ist ein Marker-Interface.
5. Nutzung von String.format(..) oder "text.formatted(..)" bei Text-Ausgaben
Siehe dazu Zeit Framework und Text-Formatierung
Verwendung siehe in Demo-Projekt Klasse Person
, Methoden toString2(..)
und toString3(..)
sowie Javadoc:
Oracle API-Doc: Formatter (Java SE 17 & JDK 17)
Tutorials dazu: