# Konstruktoren verketten



## schrobi (31. Mrz 2010)

Moinmoin zusammen.

Ich hänge an folgender Sache fest.
Ich möchte zwei Konstruktoren verketten. Da der erste Konstruktor gegeben war und der zweite durch Erweiterung der Programms hinzugefügt werden sollte ist es ja nur logisch dass man zwecks "Coderecycling" auf den ersten mit zugreift. Allerding will es nicht so wie ich (bzw der compiler) will.
Habe diverse googletreffer studiert und bin immer wieder über folgendes Beispiel gestolpert.


```
001 public Auto(String name,
002             int    erstzulassung,
003             int    leistung)
004 {
005   this(name);
006   this.erstzulassung = erstzulassung;
007   this.leistung = leistung;
008 }
```

Gut, also habe ich es auf meine Konstruktoren abgebildet, glaube ich jedenfalls... zuerst der alte Kostruktor:

```
public ExtendedCar(String owner, String type, String colour,
	        int registration, int mileage) {
	    this.owner = owner;
	    this.type = type;
	    this.colour = colour;
	    this.registration = registration;
	    this.mileage = mileage;
    }
```

und dann habe ich versucht es wie im Beispiel zu machen:

```
public ExtendedCar(String owner, String type, String colour,
	        int registration, int mileage, String location, float consumption) {
        this(owner);
        this(type);
        this(colour);
        this(registration);
        this(mileage);
        this.location = location;
        this.consumption = consumption;
    }
```

Nun bekomme ich immer einen (bzw 5) compilerfehler die mir sagen: cannot find symbol, symbol: constructor ExtendedCar(java.lang.String).

Wo liegt hier der Fehler? Er mäleöt ja auf jeden fall die 5 this(...); an aber wie kann ich das beheben?

Vielen Dank schonmal
Schrobi


----------



## Empire Phoenix (31. Mrz 2010)

Bei konstructoren kannst du nur auf super verweisen oder auf normale funktionen

super(owner,erstzulassen ect) würd den vona uto aufrufen.
Das was du amcsht wrüde bei jedem this(blub) A ein aut erstellen, b this.name ist keine defineirte funktione.

Was geht:

normale methode setbasicdata(int nummer,STring kennzeichen ect) und das im Konstructor aufrufen.


----------



## The_S (31. Mrz 2010)

this(xyz) ruft einen Konstruktor mit dem Parameter xyz auf. Hast du so einen? Außerdem darfst du nur einen Konstruktor aufrufen, und dies muss als allererstes geschehen.


----------



## faetzminator (31. Mrz 2010)

Du willst eigentlich folgendes schreiben:

```
public ExtendedCar(String owner, String type, String colour,
            int registration, int mileage, String location, float consumption) {
        this(owner, type, colour, registration, mileage);
        this.location = location;
        this.consumption = consumption;
    }
```
Damit rufst du den anderen Konstruktor mit den 5 Parameter auf.


----------



## Thief (31. Mrz 2010)

```
public ExtendedCar(String owner, String type, String colour,
            int registration, int mileage, String location, float consumption) {
        this(owner, type, colour, registration, mileage);
        this.location = location;
        this.consumption = consumption;
    }
```

Wie mein Vorgänger sagte, this() ruft den aktuellen Konstruktur mit den übergebenen Paramtern auf. In deinem Beispiel hatte der andere Konstruktur nur einen Parameter, daher dein Denkfehler


----------



## Thief (31. Mrz 2010)

Mah, ich tipp definitiv zu langsam


----------



## schrobi (31. Mrz 2010)

Moin und Danke für eure Hilfe! )
Es war wohl so, dass in den ganzen Beispielen im Internet (und auch im script der FH) immer nur EIN this übernommen wurde. Daher dachte ich dass man bei mehreren einfach alle untereinander schreibt. Aber Pustekuchen, NEBENEINANDER gehörts also )

Nun gut, wieder was gelernt und Prog läuft wie gewünscht.

Vielen Dank nochmal und bis zum nächsten Mal ;o)

Schrobi


----------

