Objektorientierung-Kurze Frage

TaxiDriver

Mitglied
Hi,
ich versteh nicht warum hier 0 ausgegeben wird. Hätte 42,0 gedacht.

Code:
public class Punkt{
    public int x;
    public int y;

public Punkt(int x, int y){
    this.x = x;
    this.y =y;}

public Punkt(int x){
    this(x,0);}

}

Main:
Code:
punkt p1 = new Punkt(42);
sout(p1.x+", "+p1.y);

Und wozu brauche ich
public Punkt(int x){
this(x,0);
?
Geht doch auch einfach nur mit punkt p1 = new Punkt(irgendwas,irgendwas); Oder nicht? Dann mit toString?
Danke
 
Da wird auch 42,0 ausgegeben:
C33Hg.png


Und ja du kannst den Konstruktor auch mit 2 Parametern aufrufen.
Wenn du nur einen Parameter übergibst wird intern der Konstruktor mit den 2 Parametern übergeben und der y-Wert einfach auf 0 gesetzt, wie du ja schon erkannt hattest.

Und was ist mit toString() ??
 
Hätte ich ja auch mal selber testen können 🙂. Hab der Lösung vertraut.

Nochmal zum Verständnis.
Wenn ich 2 Parameter bzw. alle mit new übergebe brauche ich nur den einen folgenden Konstruktor?
Code:
public Punkt(int x, int y){
    this.x = x;
    this.y =y;}


Wenn ich nur einen Wert übergebe brauche ich zusätzlich:
Code:
public Punkt(int x){
this(x,0);
?


Und toString brauche ich doch für die Ausgabe bei:
Code:
public Punkt(int x, int y){
    this.x = x;
    this.y =y;}

Punkt p1 = new Punkt(1,2)
?
 
Zuletzt bearbeitet:
Probier doch aus, was passiert, wenn du
Java:
public Punkt(int x) {...}
löschst und dann den Konstruktor mit einem Parameter aufrufst.
An der Stelle, die du uns hier zitierst, kommt keine Ausgabe vor, dementsprechend hast du da auch nichts mit toString() zu tun.

Mit freundlichen Grüßen
Xelsarion
 
Wenn du nun folgendes machen willst:

Java:
System.out.println("MeinPunkt: "+p1);

dann brauchst du die toString weil du anderenfalls einfach nur eine kryptische Adresse ausgegebn kriegst.
Probiere es mal aus, ohne toString und dann mit toString. Dann wirst du erkennen was die macht
 
Zuletzt bearbeitet von einem Moderator:
Code:
public Punkt(int x, int y){
    this.x = x;
    this.y =y;}

Code:
public Punkt(int x){
this(x,0);}

Theoretisch könntest du den Code auch wie folgt schreiben:
Code:
public Punkt(int x, int y){
    this.x = x;
    this.y =y;}

public Punkt(int x){
    this.x = x;
    this.y = 0; }

Der Code hat aber den Nachteil das X nun in 2 Konstruktoren gesetzt wird. Was das loggen und debuggen etwas erschwert (weil das nun an 2 Stellen erledigt werden muss).
Auch kann es sein der Parameter x noch geprüft wird bevor er gesetzt wird. So müsste die Prüfung wieder an 2 Stellen passieren. Wenn man dann mal vergisst eine Änderungen an eine der Stellen nachzuziehen funktioniert vielleicht das Programm ganz anders.

Daher ist es immer ratsam mittels "this" (oder "super" für abgeleitete Klassen) einen anderen Konstruktor aufzufrufen um an möglichst wenig stellen Werte zu setzen.
 

Neue Themen


Zurück
Oben