Vererbung If-Bedingung im Konstruktor

Hallo,

ich habe eine Superklasse Datum mit folgendem Konstruktor erstellt:

Java:
//(...)
public Datum(int kTag, int kMonat, int kJahr){
		
		if(this.tag <= 0 && this.tag > 31){
			System.out.println("Warnung: Ungültiger Tag" + kTag);
		}
		if(this.monat <= 0 && this.monat > 12){
			System.out.println("Warnung: Ungültiger Monat" + kMonat);
		}
		if(this.jahr <= 0){
			System.out.println("Warnung: Ungültiges Jahr" + kJahr);
		}
		this.tag = kTag;
		this.monat = kMonat;
		this.jahr = kJahr;
	} 
//(...)


Dann habe ich eine Unterklasse ISODatum erstellt, die von der Klasse Datum erbt:

Java:
public class ISODatum extends Datum{

	public ISODatum(int kTag, int kMonat, int kJahr){
		super(kTag, kMonat, kJahr);
	}
// (...)

Wenn ich jedoch ein Datum in der Testklasse ausgeben will, werden die Bedingungen im Konstruktor von Datum nicht berücksichtigt.
Wo habe ich meinen Denkfehler?
 
T

Tomate_Salat

Gast
Tipp:
mit folgender Zeile:
Java:
if(this.tag <= 0 && this.tag > 31)
überprüfst du nicht die übergebenen Parameter ;-)

Tipp2: gleiches gilt für monat und jahr ;-)
 

Sephrox

Mitglied
Nehmen wir an, der Code würde so aussehen:

Java:
public class ISODatum extends Datum{

int tag = 2;
    public ISODatum(int tag, int monat, int jahr){
        if(this.tag==2) {
          System.out.println("Equals True");
        }
    }

Dein Denkfehler ist hier , dass du wie im oberen Post schon gesagt mit "this.[Variable]" immer auf die Variable der Klasse
zugreifst. Das nutzt man Normalerweise im Konstruktor , wenn man selbe Variablennamen hat. Wie in meinem Beispiel nutze ich
die im Vorfeld für die Klasse deklarierte tag Variable mit this. , da du auf die Variable dieser Klasse zugreifst. Der Konstruktur soll bei dir aber die Übergebene Variable prüfen. Mit Gettern und Settern und automatisch generierten Konstruktur würde es so aussehen und demnach auch funktionieren.

Java:
public class ISODatum extends Datum{

int tag = 0;
    public ISODatum(int tag, int monat, int jahr){
          this.tag = tag;
        }
    }

Das heißt man überträgt der Klassenvariable tag , die übergebene Variable über den Konstruktor.
Die Klassenvariable tag wäre in dem Fall

Java:
new ISODatum(2,0,0);

2 !

Um nun also direkt beim Konstruktur zu prüfen, musst du es so machen:

Java:
public class ISODatum extends Datum{
    public ISODatum(int tag, int monat, int jahr){
          if(tag==2) {
             System.out.println("Wuhu es ist der 2. :) ");
         }

     }
    }

Hoffe es ist verständlich :)

EDIT: Außerdem nehmen bei dir die IF Abfragen immer falsche Werte an:
if(this.tag <= 0 && this.tag > 31){


Wie kann ein Wert tag <= 0 sein und > 31 ?
Also nehmen wir an -2 ist <= 0 und du fragst jetzt mit einer UND Bedingungen ober dieser wert gleichzeitig > 31 ist?

Du müsstest es wenn dann so abfragen: if(tag<=0 || tag > 31)
Wenn der tag jetzt 5 betragen würde , würde es so aussehen:
5<=0 = false
5>31 = false

Also hast du dein Ergebnis, es liegt in dem Bereich zwischen 0 und 31.

Hast du jetzt eine tag Variable mit 32:
32<=0 = false
32>31 = true

Ergebnis : ! Achtung ! tag ist nicht erlaubt !
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

von den falschen Variablen mal ganz abgesehen, sind Deine Prüfbedingungen sehr seltsam !

Danach wären bspw. auch folgenden Daten gültig :

30. Februar 2012
15. März 928
31. September 9876

:noe:

Gruß
Klaus
 
Zuletzt bearbeitet:
Hallo,

also nochmal danke für den Tipp mit den Übergangeparametern. Ich hatte das schon vorher da stehen, aber es hatte sich auch damals nichts an der Ausgabe geändert.

@Sephrox: Stimmt, ich habe versehentlich das Zeichen für "Und" anstatt das Zeichen für "Oder" verwendet.

@VfL_Freak: Ja, das weiß ich. Jedoch ist das nicht Teil der Aufgabe. Ich werde das vielleicht später noch bearbeiten.

Es werden trotzdem weiterhin Daten wie beispielsweise 32.14.2011 ausgegeben.

Gibt es denn noch die Möglichkeit, dass bei der Vererbung von der Klasse Datum zu der Unterklasse ISODatum ein Fehler auftritt?



Hier nochmal der korrigierte Konstruktor der Superklasse Datum:

Java:
public abstract class Datum {
	
	private int tag;
	private int monat;
	private int jahr;
	
	public Datum(int kTag, int kMonat, int kJahr){
		
		if(kTag <= 0 || kTag > 31){
			System.out.println("Warnung: Ungültiger Tag" + kTag);
		}
		if(kMonat <= 0 || kMonat > 12){
			System.out.println("Warnung: Ungültiger Monat" + kMonat);
		}
		if(kJahr <= 0){
			System.out.println("Warnung: Ungültiges Jahr" + kJahr);
		}
		this.tag = kTag;
		this.monat = kMonat;
		this.jahr = kJahr;
	}
 

VfL_Freak

Top Contributor
Moin,

Es werden trotzdem weiterhin Daten wie beispielsweise 32.14.2011 ausgegeben.
ja, warum auch nicht ???:L

Du gibst zwar die Warnungen aus, setzt dann aber trotzdem die fehlerhaften Werte !!
Event. sollst Du abbrechen !!??!!??

Gruß
Klaus
 
Ok, also den Fehler, den ich gemacht habe kann man vielleicht mit einer Brille oder einer Tasse Kaffee beheben:

Dass es sich um ein ungültiges Datum handelt wurde Ausgegeben, jedoch hätte ich bei Eclipse hochscrollen müssen um das zu sehen.... die Ausgabe der Fehlermeldung befindet sich also lediglich an der falschen Stelle, dass sollte sich aber beheben lassen. ;)

Trotzdem vielen Dank für die Tipps!!!!
 

Sephrox

Mitglied
:) ich glaube der Kollege meinte damit, dass wenn die Werte falsch sind , diese nicht gespeichert werdens sollten
ungefähr so:

Java:
public abstract class Datum {
    
    private int tag;
    private int monat;
    private int jahr;
    
    public Datum(int kTag, int kMonat, int kJahr){
        boolean falschesdatum=false;
        
        if(kTag <= 0 || kTag > 31){
            System.out.println("Warnung: Ungültiger Tag" + kTag);
            falschesdatum=true;
        }
        if(kMonat <= 0 || kMonat > 12){
            System.out.println("Warnung: Ungültiger Monat" + kMonat);
            falschesdatum=true;
        }
        if(kJahr <= 0){
            System.out.println("Warnung: Ungültiges Jahr" + kJahr);
            falschesdatum=true;      
       }
        if(falschesdatum==false) {
        this.tag = kTag;
        this.monat = kMonat;
        this.jahr = kJahr; 
          }
    }


EDIT: Oder den Kommentar über meinem Post beachten :)
 

VfL_Freak

Top Contributor
Moin,

:) ich glaube der Kollege meinte damit, dass wenn die Werte falsch sind , diese nicht gespeichert werdens sollten
genau :)

ungefähr so:
Java:
public abstract class Datum {
    
    private int tag;
    private int monat;
    private int jahr;
    
    public Datum(int kTag, int kMonat, int kJahr){
        boolean falschesdatum=false;
        
        if(kTag <= 0 || kTag > 31){
            System.out.println("Warnung: Ungültiger Tag" + kTag);
            falschesdatum=true;
        }
        if(kMonat <= 0 || kMonat > 12){
            System.out.println("Warnung: Ungültiger Monat" + kMonat);
            falschesdatum=true;
        }
        if(kJahr <= 0){
            System.out.println("Warnung: Ungültiges Jahr" + kJahr);
            falschesdatum=true;      
       }
        if(falschesdatum==false) {
        this.tag = kTag;
        this.monat = kMonat;
        this.jahr = kJahr; 
          }
    }

am Ende besser so :
Java:
if( !falschesdatum )  // ist überrsichtlicher !!
{
        this.tag = kTag;
        this.monat = kMonat;
        this.jahr = kJahr; 
}

Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

na gut, ok - so denn eine Exception gewünscht ist ;)

Dann könnte man ja auch noch ein
Java:
System.exit(-1);
anhängen :bae:;)

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
Lion.King if-Bedingung Java Basics - Anfänger-Themen 3
B Zuweisungen und Methodenaufrufe in Bedingung der while Schleife? Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
L while Schleife mit 2 Bedingung endet nicht Java Basics - Anfänger-Themen 3
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
A Dividieren mit Bedingung? Java Basics - Anfänger-Themen 7
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
Dimax Collections groupingBy mit Bedingung Java Basics - Anfänger-Themen 11
H Frage zur if-Bedingung bzw switch case Java Basics - Anfänger-Themen 6
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
Hanschyo If Bedingung Fehler Java Basics - Anfänger-Themen 7
T Komischer Fehler mit einer if-Bedingung Java Basics - Anfänger-Themen 3
W while Schleife und Bedingung Java Basics - Anfänger-Themen 11
E if-Bedingung mit mehreren Möglichkeiten ? Java Basics - Anfänger-Themen 6
S DefaultTableCellRenderer mit Bedingung Java Basics - Anfänger-Themen 1
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
Z Verschachtelte If-Bedingung Java Basics - Anfänger-Themen 6
N Methode mit While-Schleife und If-Bedingung und Array-Initialisierung Java Basics - Anfänger-Themen 4
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
L Methoden if Bedingung trotz Erfüllung, nicht angesprochen Java Basics - Anfänger-Themen 12
P Compiler-Fehler if Bedingung fehlerhaft Java Basics - Anfänger-Themen 7
X Schleife bis "Bedingung" ausführen Java Basics - Anfänger-Themen 13
TheMenox Verschachtelte If Bedingung Java Basics - Anfänger-Themen 4
M Erste Schritte if-Bedingung schlägt fehl Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
Ocram Variablen Vereinfachung einer Bedingung Java Basics - Anfänger-Themen 18
J Can't find symbol - Erstellung eines Objekts in if-Bedingung Java Basics - Anfänger-Themen 3
M Frage zu if-Bedingung Java Basics - Anfänger-Themen 1
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
J Wo liegt nur an dieser einfachen Bedingung mein Fehler? Java Basics - Anfänger-Themen 8
R for-Schleife bei erfüllter Bedingung beenden Java Basics - Anfänger-Themen 7
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
S if bedingung - Stunde und Minute vergleichen Java Basics - Anfänger-Themen 5
K If-Bedingung mit Wertzuweisung Java Basics - Anfänger-Themen 2
J Arrays prüfen und über if Bedingung ausgeben Java Basics - Anfänger-Themen 15
T if Bedingung Java Basics - Anfänger-Themen 16
MiMa for Schleife Bedingung Java Basics - Anfänger-Themen 4
M in jTable schreiben unter Bedingung Java Basics - Anfänger-Themen 3
J Erste Schritte Kurze Frage zu Listenern und If-Bedingung Java Basics - Anfänger-Themen 2
N Verifikation einer if-Bedingung Java Basics - Anfänger-Themen 9
P Variablen ArrayList mit Bedingung iterieren Java Basics - Anfänger-Themen 2
E if(Bedingung) Java Basics - Anfänger-Themen 9
L Erste Schritte Sollte ich hier lieber Cases verwenden oder wäre eine If-Bedingung besser? Java Basics - Anfänger-Themen 6
Anfänger2011 Wie bricht man alles ab wenn eine Bedingung nicht erfüllt ist? Java Basics - Anfänger-Themen 21
P Variablen Variable in if Bedingung anlegen, Wert zuweisen und diesen als Bedingung nutzen Java Basics - Anfänger-Themen 4
M Und Bedingung Java Basics - Anfänger-Themen 17
N Bedingung für Datentypen Java Basics - Anfänger-Themen 3
E if-Bedingung funktioniert nicht Java Basics - Anfänger-Themen 9
W Funktionsaufruf nach Bedingung Java Basics - Anfänger-Themen 3
S for schleife mit if bedingung Java Basics - Anfänger-Themen 21
S return(Bedingung) ? [mehrere Befehle] Java Basics - Anfänger-Themen 5
2 Bedingung bei Schleife Java Basics - Anfänger-Themen 23
E Methode in der Bedingung Java Basics - Anfänger-Themen 11
E if Bedingung Java Basics - Anfänger-Themen 4
H Sortierung eines String[][] mit Bedingung Java Basics - Anfänger-Themen 7
H Bedingung while-Schleife | integer number too large Java Basics - Anfänger-Themen 2
J Gibt es eine möglichkeit ähnlich wie .equals(bedingung1 ||bedingung ..n) ? Java Basics - Anfänger-Themen 5
I Potenzmenge mit Bedingung Java Basics - Anfänger-Themen 24
S If-Bedingung Java Basics - Anfänger-Themen 15
P Einfache Bedingung (?) in Java Java Basics - Anfänger-Themen 3
K Fragen zu If-Bedingung Java Basics - Anfänger-Themen 3
S bedingung in variable speichern? Java Basics - Anfänger-Themen 8
neurox Ergebnis der if-Bedingung weiter verwenden Java Basics - Anfänger-Themen 5
G If-Schleife läuft ohne erfüllte Bedingung Java Basics - Anfänger-Themen 13
K Logik in if-Bedingung Java Basics - Anfänger-Themen 2
S if anweisung wird ausgeführt egal ob bedingung true o. false Java Basics - Anfänger-Themen 2
S For Schleife, Bedingung Java Basics - Anfänger-Themen 4
S Wildcard-Bedingung Java Basics - Anfänger-Themen 10
G Probleme mit break hier; in if-Bedingung Java Basics - Anfänger-Themen 5
M Schleife abhängig von Bedingung Java Basics - Anfänger-Themen 5
G while Bedingung? Java Basics - Anfänger-Themen 6
L Bedingung immer false, auch wenn zwei Strings gleich sind Java Basics - Anfänger-Themen 11
L IF Bedingung in SELECT Statement? Java Basics - Anfänger-Themen 3
M Kleine Frage zu If-Bedingung Java Basics - Anfänger-Themen 4
Bierhumpen String Bedingung. Java Basics - Anfänger-Themen 8
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3
R Klassen nach Bedingung laden Java Basics - Anfänger-Themen 22
G Compiler sieht die Bedingung nicht! Java Basics - Anfänger-Themen 5
W if Bedingung mit "Außer" Java Basics - Anfänger-Themen 4
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben