# Wann soll/muss man ein neues Objekt erzeugen?



## JavaIsTheBest (15. Feb 2016)

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


```
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.




Spoiler: Klasse Point





```
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+")");
    }
}
```







Spoiler: Klasse Line





```
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);
    }
}
```


----------



## Flown (15. Feb 2016)

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 (15. Feb 2016)

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 (15. Feb 2016)

JavaIsTheBest hat gesagt.:


> 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)



JavaIsTheBest hat gesagt.:


> 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.


----------



## kneitzel (15. Feb 2016)

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 (15. Feb 2016)

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?


----------



## kneitzel (15. Feb 2016)

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.


----------

