Klasse mit extends Calendar über Methoden ändern (Hirnblockade)

torresbig

Mitglied
Hallo,

ich habe mir eine Klasse erstellt und dieser Klasse "Calendar" vererbt.
Dies hab ich gemacht, da in einem Managerspiel immer nachts um 3 Uhr die Transfers gemacht werden und alles was vor einer bestimmte Zeit ist, noch zu dem anderen Tag zählen soll. ist ja auch egal, aber hab ein Knoten im Kopf.

Java:
public class ComunioDate extends Calendar {

    private static final long serialVersionUID = 1L;
 
    public ComunioDate(){
        getInstance();
        setFirstDayOfWeek(MONDAY);
        add(Calendar.HOUR_OF_DAY, +10);  // das hier funktioniert! innerhalb der Klasse
    }
}

warum kann ich nicht einfach folgendes machen
Java:
ComunioDate yesterday = new ComunioDate();
yesterday.add(Calendar.DAY_OF_MONTH, -1));

oder

Java:
ComunioDate yesterday = new ComunioDate().add(Calendar.DAY_OF_MONTH, -1);

Ich habe hier einfach Verständnisschwierigkeiten. Bin kein gelernter Programmierer und bin deshalb für eine kleine Lehrstunde sehr sehr dankbar.

Hier nochmal zum Vergleich, wie es geht und wie nicht.
Java:
Calendar test =  Calendar.getInstance();
// das klappt!
test.add(Calendar.DAY_OF_MONTH, -1);

ComunioDate yesterday = new ComunioDate();
// geht nicht! WARUM?
yesterday.add(Calendar.DAY_OF_MONTH, -1);
 
Zuletzt bearbeitet:

Oneixee5

Top Contributor
Also wenn es sich um java.util.Calendar handelt, dann dürfte - dein Code unten, gar nicht kompilieren, da einige abstrakte Methoden nicht implementiert sind. Leider verschweigst du die Fehlermeldungen.
Wenn du von Calendar erben willst, dann solltest du von GregorianCalendar erben. Ich sehe aber keinen Sinn darin, zudem sollte man die java.time-API verwenden. Die java.util.* - Date- und Time- sind fast nur noch auch Kompatibilätsgründen vorhanden.
Java:
public class ComunioDate extends Calendar {

    private static final long serialVersionUID = 1L;
 
    public ComunioDate(){
        getInstance();
        setFirstDayOfWeek(MONDAY);
        add(Calendar.HOUR_OF_DAY, +10);  // das hier funktioniert! innerhalb der Klasse
    }
}
 

torresbig

Mitglied
Also wenn es sich um java.util.Calendar handelt, dann dürfte - dein Code unten, gar nicht kompilieren, da einige abstrakte Methoden nicht implementiert sind. Leider verschweigst du die Fehlermeldungen.
Wenn du von Calendar erben willst, dann solltest du von GregorianCalendar erben. Ich sehe aber keinen Sinn darin, zudem sollte man die java.time-API verwenden. Die java.util.* - Date- und Time- sind fast nur noch auch Kompatibilätsgründen vorhanden.
Java:
public class ComunioDate extends Calendar {

    private static final long serialVersionUID = 1L;
 
    public ComunioDate(){
        getInstance();
        setFirstDayOfWeek(MONDAY);
        add(Calendar.HOUR_OF_DAY, +10);  // das hier funktioniert! innerhalb der Klasse
    }
}

ja, es ist der java.util.Calendar
Es kommt zu keiner Fehlermeldung. Er ändert einfach nur das Datum nicht.
mit GregorianCalendar ist es das selbe.
genau, bei java.util.Date hat man die Probleme, dass man nicht so komfortabel die Tage, Stunden... abziehen kann. Hier muss man ja immer in Millisekunden umrechen (was grundsätzlich ja kein Problem ist) und irgendwie wird überall dazu geraten java.util.Calendar statt Date zu verwenden. (wie du ja schreibst)

nochmal warum ich das mache. Wenn ich z.B. um 2 Uhr Nachts eine abfrage starte, soll er das Datum vom Vortag nehmen und die Zeit z.B. auf 10 Uhr setzen.

Aber jetzt mal egal ob sinnvoll oder nicht.
Warum klappt innerhalb der klasse das add(Calendar.HOUR_OF_DAY, +10 dass 10 stunden dazu gerechnet werden, aber wenn ich das auf die Klasse ComunioDate anwende geht es nicht.
Java:
Calendar test =  Calendar.getInstance();
// das klappt!
test.add(Calendar.DAY_OF_MONTH, -1);

ComunioDate yesterday = new ComunioDate();
// geht nicht! WARUM?
yesterday.add(Calendar.DAY_OF_MONTH, -1);
 

LimDul

Top Contributor
Wenn du von Calendar erbst, kann das ganze eh nicht funktionieren. Die Klasse ist abstrakt. Wenn musst du - wie schon geschrieben - von GregorianCalendar erben. Und da sollte das mit dem add funktionieren.

Bzgl. funktioniert nicht. Was funktioniert nicht? Bring am besten ein vollständiges Beispiel, mit dem was du erwartest und was stattdessen rauskommt.
 

torresbig

Mitglied
hab doch das ganze beispiel gebracht :D

Java:
Calendar test =  Calendar.getInstance();
test.add(Calendar.DAY_OF_MONTH, -1);
// das klappt! >> Datum: 30.09.2022
// hier ändert sich das Datum auf einen Tag vor heute (gestern)

ComunioDate yesterday = new ComunioDate();
yesterday.add(Calendar.DAY_OF_MONTH, -1);
// geht nicht! >> Datum: 01.10.2022
// hier ändert sich das Datum nicht auf einen Tag vor heute

und die Klasse ComunioDate sieht so aus (auch wenn ich GregorianCalendar nehme ist es das selbe!):
Java:
public class ComunioDate extends Calendar {

    private static final long serialVersionUID = 1L;
 
    public ComunioDate(){
        getInstance();
        setFirstDayOfWeek(MONDAY);
        add(Calendar.HOUR_OF_DAY, +10);  // das hier funktioniert! innerhalb der Klasse
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Wie Dir schon gesagt wurde: Die Klasse ComunioDate wird so nicht übersetzen, da diese nicht abstract ist und Du nicht alle abstract Methoden von Calendar implementiert hast.

Daher ist es egal, was Du sonst noch an Code schreibst: Da diese Klasse nicht übersetzt kann es auch zu keiner Ausführung und damit zu einem "nicht funktionieren" kommen.

Mögliche Alternativen sind auch schon genannt worden: Alle abstrakten Methoden implementieren oder eine Sub-Klasse verwenden, die dies schon gemacht hat.

Das einfach noch einmal in meinen eigenen Worten, was u.a. @LimDul schon gesagt hat.
 

LimDul

Top Contributor
Das kompiliert wir gesagt nicht, bring mal ein kompilierfähiges Beispiel inklusive der Ausgabe in der Konsole. Was rauskommt und was rauskommen soll.
 

torresbig

Mitglied
Sorry Leute, ich war einfach nur doof. Es hatte sich ein ganz dummer Fehler eingeschlichen. Ich wollte die Uhrzeit immer bei nem neuem Datum auf eine bestimmte Zeit setzen und in meinem Beispiel hatte ich immer
Code:
set(HOUR_OF_DAY, +10);  // das Plus hat sich da eingeschlichen!
aber das ist natürlich falsch. Das Plus hat da nix zu suchen. so hat er immer 10 Stunden addiert, was nach 14 Uhr natürlich 1 Tag weiter ist und dann kommt das falsche Datum raus.

Es geht auch NUR mit dem GregorianCalendar! Denke ich hatte soviel rumversucht mit dem normalen Calendar, dass sich irgendwie das + dann eingeschlichen hatte und dann beim ersten Test mit GregorianCalendar auch der Fehler kam (aus den oben genannten Gründen):

So geht es jetzt:
Java:
public class TestComunioDate {

    public static void main(String[] args) {
        TestComunioDate tcd = new TestComunioDate();
        Calendar test =  Calendar.getInstance();
        test.add(Calendar.DAY_OF_MONTH, -1);
        System.out.println("Test Calendar: " + new SimpleDateFormat("dd.MM.yyyy - HH:mm").format(test.getTime()));
        // CONSOLE: Test ComunioDate1: 30.09.2022 - 23:50
       
        ComunioDate1 testCdate =  tcd.new ComunioDate1();
        testCdate.add(Calendar.DAY_OF_MONTH, -1);
        System.out.println("Test ComunioDate1: " + new SimpleDateFormat("dd.MM.yyyy - HH:mm").format(testCdate.getTime()));
        // CONSOLE: Test ComunioDate1: 30.09.2022 - 10:00
    }
    class ComunioDate1 extends GregorianCalendar {
        private static final long serialVersionUID = 1L;

        public ComunioDate1() {
            getInstance();
            setFirstDayOfWeek(MONDAY);
            set(HOUR_OF_DAY, 10);
        }
    }
}


Also wenn es sich um java.util.Calendar handelt, dann dürfte - dein Code unten, gar nicht kompilieren, da einige abstrakte Methoden nicht implementiert sind. Leider verschweigst du die Fehlermeldungen.
Wenn du von Calendar erben willst, dann solltest du von GregorianCalendar erben. Ich sehe aber keinen Sinn darin, zudem sollte man die java.time-API verwenden. Die java.util.* - Date- und Time- sind fast nur noch auch Kompatibilätsgründen vorhanden.
Java:
public class ComunioDate extends Calendar {

    private static final long serialVersionUID = 1L;
 
    public ComunioDate(){
        getInstance();
        setFirstDayOfWeek(MONDAY);
        add(Calendar.HOUR_OF_DAY, +10);  // das hier funktioniert! innerhalb der Klasse
    }
}
jetzt verstehe ich auch was du gemeinst hattest. die ganzen abstrakten Methoden hatte Eclipse unten hinzugefügt, aber waren von mir natürlich nicht "gefüllt". Mit GregorianCalendar und meinem + Fehler geht es

Danke an alle. Wieder ein wenig schlauer. DANKE!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
kanywayne Java programmieren: Polynom Klasse Allgemeine Java-Themen 4
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S static in Interface und Klasse Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
J Builder Klasse mit Lombok bauen Allgemeine Java-Themen 2
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
X Klassen Klasse BreakIterator Allgemeine Java-Themen 6
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
M Kapselung Modellierung von Intervallen: Klasse Interval Allgemeine Java-Themen 4
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
ReinerCoder Klasse kann nicht public deklariert werden Allgemeine Java-Themen 2
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
J IndexOutOfBoundsException bei der Nutzung der Klasse Message von mime4j Allgemeine Java-Themen 5
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
K Best Practice Auf die Klasse zugreifen im erzeugten ActionListener Allgemeine Java-Themen 2
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
magdaStone Logikproblem Umschalten von booleans in anderer Klasse Allgemeine Java-Themen 7
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
A Java Klasse auf Tomcat während der Laufzeit austauschen Allgemeine Java-Themen 1
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
B Animierte Klasse schreiben - Wie? Allgemeine Java-Themen 9
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
L Eclipse JavaFX Klasse starten programmatisch Allgemeine Java-Themen 1
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
so_ein_Komischer Erste Schritte java Math Klasse finden? Allgemeine Java-Themen 2
J beans.instantiate(): Klasse kann nicht instanziiert werden Allgemeine Java-Themen 2
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
R Abstrakte Basisklasse und instanzierte Objekte der abgeleiteten Klasse als Basisklasse übergeben Allgemeine Java-Themen 2
F Methodenaufruf mit abgeleiteter Klasse als Arg... Allgemeine Java-Themen 10
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Die Initialisierung von Feldern in ableitender Klasse erzwingen..? Allgemeine Java-Themen 16
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
M Variable außerhalb Klasse definierbar? Allgemeine Java-Themen 2
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F Enums als innere Klasse sinnvoll? Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
E KeyCode in anderer Klasse speichern Allgemeine Java-Themen 2
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
M XML DOM Klasse die Iterable Implementiert Allgemeine Java-Themen 1
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L Classpath Klasse einbinden Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben