Wann soll/muss man ein neues Objekt erzeugen?

JavaIsTheBest

Bekanntes Mitglied
Hallo,
ich habe eine kleine Frage zu der Aufgabe hier.
In der Klasse Line hat man den Konstruktor

Java:
    public Line(double x1,double y1,double x2, double y2){
        this(new Point(x1,y1),new Point(x2,y2));
    }

1. Woher weiß, ich dass hier ein neues Objekt erzeugt werden muss? Z.B. deklariere ich eine Variable Point ohne ein Objekt zu erzeugen. Warum wäre das erlaubt?
2. Was wäre eine alternative Schreibweise zu dem oben genanannten Konstruktor?
begin.getX()=x1; würde z.B. nicht gehen.


Java:
public class Point {
    private double x;
    private double y;
   
    public Point(double x, double y){
        this.x=x;
        this.y=y;
    }
    public Point(){
        this(0,0);
    }
    public double getX(){
        return this.x;
    }
    public double getY(){
        return this.y;
    }
    public void move(double x, double y){
        this.x+=x;
        this.y+=y;
    }
    public void print(){
        System.out.println("("+this.x+", "+this.y+")");
    }
}


Java:
public class Line {
    private Point begin;
    private Point end;
   
    public Line(Point p1,Point p2){
        this.begin=p1;
        this.end=p2;
    }
    public Line(double x1,double y1,double x2, double y2){
        this(new Point(x1,y1),new Point(x2,y2));
    }
    public Point getBegin(){
        return begin;
    }
    public Point getEnd(){
        return end;
    }
    public double length(){
        double x=Math.pow(end.getX()-begin.getX(), 2);
        double y=Math.pow(end.getY()-begin.getY(), 2);
        return Math.sqrt(x+y);
    }
}
 

Anhänge

  • 1.png
    1.png
    76,6 KB · Aufrufe: 35
  • 2.png
    2.png
    78,1 KB · Aufrufe: 20

Flown

Administrator
Mitarbeiter
Also die Aufgabe ist auf jedenfall gelöst. Aber was deine Fragen angeht: Ich habe keine Ahnung was du wissen willst.
Zu 1.: Du benötigst hier neue Objekte vom Typ Point da der Konstruktor Line(Point p1, Point p2) lautet. Was meinst du mit "variable Point ohne Objekterzeugung"?
Zu 2.: Was?
 

JavaIsTheBest

Bekanntes Mitglied
Zu 1) Warum wird aber das Schlüsselwort new benötigt? Hätte ich nicht einfach nur (Point p1, Point p2) schreiben können?
Zu 2)
In der Klasse Line hab ich die Variable begin vom Typ Point deklariert. Um diese zu verwenden muss ich kein neues Objekt erzeugen. Warum ist das so?
 

Joose

Top Contributor
Zu 1) Warum wird aber das Schlüsselwort new benötigt? Hätte ich nicht einfach nur (Point p1, Point p2) schreiben können?

Weil du den anderen Konstruktor aufrufst und dieser erwartet 2 Objekte vom Typ Point. Daher musst du natürlich 2 Objekte erstellen (was mittels "new Point(" passiert)

Zu 2) In der Klasse Line hab ich die Variable begin vom Typ Point deklariert. Um diese zu verwenden muss ich kein neues Objekt erzeugen. Warum ist das so?

Weil diese Variable im Konstruktor der Klasse Line ein Objekt (bzw. die Referenz zum Objekt) zugewiesen bekommt.
 
K

kneitzel

Gast
Versuch das immer etwas als reale Objekte zu sehen. Wenn Du erwartest, dass Dir eine Geldbörse gegeben wird: Dann kann ich Dir das Geld doch nicht auch einfach so in die Hand drücken.
Also hier wäre das Geld die Koordinaten. Da Du aber eine Geldbörse erwartest, muss ich irgendwo eine Geldbörse her bekommen. Ich habe aber keine, also erstelle ich schnell eine. (Also new Point und die Koordinaten stecke ich da direkt mit rein!)

Ist also sehr leicht über die Parallelen zur realen Welt nachvollziehbar.
 

JavaIsTheBest

Bekanntes Mitglied
Ich weiß nicht , obich das richtig verstanden habe, weil ich habe eine weitere Frage dazu.

public Line(Point p1,Point p2){
this.begin=p1;
this.end=p2;
}

Warum wird hier in der Klasse Line kein new Point benötigt?
 
K

kneitzel

Gast
Wenn Du eine Geldbörse bekommst, dann musst du doch keine Neue erstellen um eine Geldbörse in deinem Regal zu verstauen. Du kannst die bekommene ins Regal tun.
 

Neue Themen


Oben