1 // DatumMitZeit.java
2 package equals.variante2;
3
4 /** 5 * DatumMitZeit ist ein Bauplan für Datums-mit-Zeit-Objekte. 6 * Beispielprogramm zur Programmiertechnik 1, Teil 5. 7 * DatumMitZeit als Unterklasse (nicht nachahmenswert). 8 * @author H.Drachenfels 9 * @version 9.12.2019 10 */
11 public class DatumMitZeit extends Datum {
12 private final int stunde; // [0,23]
13 private final int minute; // [0,59]
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 protected DatumMitZeit(int tag, int monat, int jahr,
30 int stunde, int minute) {
31 super(tag, monat, jahr);
32
33 if (stunde < 0 || stunde > 23 || minute < 0 || minute > 59) {
34 throw new IllegalArgumentException("falsche Zeit");
35 }
36
37 this.stunde = stunde;
38 this.minute = minute;
39 }
40
41 @Override
42 public String toString() {
43 return String.format("%sT%02d:%02d",
44 super.toString(), this.stunde, this.minute);
45 }
46
47 @Override
48 public boolean equals(Object o) {
49 if (o instanceof DatumMitZeit) {
50 // Variante 3: if (o != null && this.getClass() == o.getClass()) {
51 DatumMitZeit d = (DatumMitZeit) o;
52 return super.equals(o)
53 && this.stunde == d.stunde
54 && this.minute == d.minute;
55 }
56
57 // Variante 1 und 3: return false;
58 return super.equals(o);
59 }
60
61 @Override
62 public int hashCode() {
63 return super.hashCode() ^ (this.stunde << 6) + this.minute;
64 }
65 }
66