2 package equals.variante4;
3
4 /**
5 * DatumMitZeit ist ein Bauplan für Datum-mit-Zeit-Objekte.
6 * Beispielprogramm zur Programmiertechnik 1, Teil 5.
7 * DatumMitZeit per Objektkomposition statt Vererbung.
8 * @author H.Drachenfels
9 * @version 9.12.2019
10 */
11 public final class DatumMitZeit { // Varianten 1, 2 und 3: extends Datum
12 private final Datum datum;
13 private final Zeit zeit;
14
15 /**
16 * Fabrikmethode, die ein Objekt mit den angegebenen Werten liefert.
17 * @param tag ist der Tag im Monat als Zahl zwischen 1 und 31
18 * @param monat ist der Monat im Jahr als Zahl zwischen 1 und 12
19 * @param jahr ist das Jahr
20 * @param stunde ist die Stunde des Tages als Zahl zwischen 0 und 23
21 * @param minute ist die Minute der Stunde als Zahl zwischen 0 und 59
22 * @return Referenz auf das Objekt
23 */
24 public static DatumMitZeit valueOf(int tag, int monat, int jahr,
25 int stunde, int minute) {
26 return new DatumMitZeit(tag, monat, jahr, stunde, minute);
27 }
28
29 private DatumMitZeit(int tag, int monat, int jahr,
30 int stunde, int minute) {
31 this.datum = Datum.valueOf(tag, monat, jahr);
32 this.zeit = Zeit.valueOf(stunde, minute);
33 }
34
35 @Override
36 public String toString() {
37 return String.format("%sT%s", this.datum, this.zeit);
38 }
39
40 @Override
41 public boolean equals(Object o) {
42 if (o instanceof DatumMitZeit) {
43 DatumMitZeit d = (DatumMitZeit) o;
44 return this.datum.equals(d.datum)
45 && this.zeit.equals(d.zeit);
46 }
47
48 return false;
49 }
50
51 @Override
52 public int hashCode() {
53 return this.datum.hashCode() ^ this.zeit.hashCode();
54 }
55 }
56