# Zwei konstruktoren?



## Jeffi (23. Jan 2009)

Hallo,

ich habe eine Aufgabe das ich zwei konstruktoren in einem Objekt erstellen soll:

Konstruktoren: der erste Konstruktor setzt den Parameter (die zu spiegelnde Zeichenkette). Der zweite Konstruktor ruft den ersten Konstruktor mit der leeren Zeichenkette auf (Standard-Konstruktor).

(hier die ganze: http://sar.informatik.hu-berlin.de/teaching/2008-w GdP/uebungen/08-b/08-b.htm#A2 )

ich verstehe nicht was zwei konstruktoren bringen und ich wie ich die erstellen soll? ein konstruktor hat doch keinen namen, wäre der dann zweimal gleichlautend?


----------



## Wildcard (23. Jan 2009)

Zweimal der gleiche Name, aber die Parameterliste (und damit die Methodensignatur) ist unterschiedlich.


> ich verstehe nicht was zwei konstruktoren bringen


Dann kannst du dir aussuchen welchen du aufrufst


----------



## jeffi (23. Jan 2009)

achso, also nach dieser Aufgabe muss ich den ersten aufrufen indem ich einen parameter übergebe? und wenn ich keinen parameter übergebe rufe ich demnach den zweiten auf.

Aber der soll dann dennoch den ersten mit einer leeren zeichenketter aufrufen, wie mach ich das?


----------



## Wildcard (23. Jan 2009)

```
this("");
```


----------



## Gelöschtes Mitglied 5909 (24. Jan 2009)

```
public Foo(String bar) {
  foobar = bar;
}

public Foo() {
 this("");
}
```


----------



## Gast (24. Jan 2009)

achso das ist sozusagen eine maßnahme falls man keinen string übergibt das es keine Fehlermeldung erzeugt?! ist ja irgendwie umständlich, oder welchen sinn kann das haben?


----------



## Gelöschtes Mitglied 5909 (24. Jan 2009)

schau in die API und du siehst viele nützliche Anwendungen

z.b.:



> Constructor Summary
> GregorianCalendar()
> Constructs a default GregorianCalendar using the current time in the default time zone with the default locale.
> GregorianCalendar(int year, int month, int dayOfMonth)
> ...


----------



## 0x7F800000 (24. Jan 2009)

Gast hat gesagt.:
			
		

> achso das ist sozusagen eine maßnahme falls man keinen string übergibt das es keine Fehlermeldung erzeugt?!


Ne, wenn man keine fehlermeldungen haben will, dann kann man ja auch eine brechstange nehmen und den compiler kaputtmachen :autsch: Was denkst du dir, wozu leute Programme schreiben? Um compilerfehler zu vermeiden? Oder vielleicht doch, um den rechner dazu zu bringen, irgendwas sinnvolles zu tun? Ich weiß jetzt nicht was du als "sinnvoll" ansiehst, aber einfach so inhaltslosen code zu erzeugen, der einfach nur da ist, um keine compilerfehler auszulösen, ist bescheuert.



> welchen sinn kann das haben?


Das ist der Sinn: wenn man mehrere Konstruktoren haben will, schreibt man sich welche.

Nur um das an einem geometrischen beispiel zu verdeutlichen:
Du Kannst eine "3D-Kugel" festlegen durch mehrere verschiedene angaben:
-Mittelpunkt & radius
-Mittelpunkt und ein Punkt auf der Oberfläche
-Vier Oberflächenunkte
-Drei oberflächenpunkte, eine Orientierung und den Radius
...

man kann sich da noch zig tausend kombinationen ausdenken, wenn man will. Und vielleicht braucht man alles diese Kombinationen sogar regelmäßig bei der erstellung von irgendeinem Programm. Also schreibt man sich dementsprechend viele Konstruktoren:

```
class Ball{
   public Ball(center,radius){...}
   public Ball(center,surfacePoint){...}
   public Ball(surfacePoints[]){...}
   public Ball(surfacePoints[], orientation, radius){...}
   public Ball(){ this(new Point(0,0,0),0); } //default konstruktor, nur so für alle Fälle...
...
}
```


----------



## Gast (24. Jan 2009)

ok danke, denke habs ungefähr klar!


----------

