Programmieren Java return this?
Soweit nachvollziehbar. Allerdings:
return this;
=> Für was steht hier das this?
Nun wird hier die Methode gibInstanz() in der Klasse Dreieck mit
@Override überschrieben
=> Welche Klassen wären als Rückgabetyp für gibInstanz der Klasse Dreieck denkbar?
1 Antwort
Mit "return this" wird einfach das Objekt selbst zurückgegeben. In der main-Methode würde es also keinen Unterschied machen, ob du "System.out.println(figuren[i].gibInstanz())" oder nur "System.out.println(figuren[i])" schreibst.
Wenn du die Methode in den vererbten Klassen überschreibst, kannst du als Rückgabetyp (also im Funktionsheader) nur "GeometrischeFigur" angeben. Das, was im Endeffekt hinter dem "return" Befehl steht, kann aber auch ein Dreieck oder Rechteck sein. Also das musst du nicht extra umwandeln.
Genau. Das "return this" heißt, dass das Objekt einen Verweis auf sich selbst zurückgibt. Ich weiß grade nicht, wie ich das erklären soll...
Also in der main-Methode wird ja ein Array aus "GeometrischeFigur"-Objekten erzeugt. Das Array hat Platz für zwei Objekte und wird mit einem Dreieck und einem Rechteck gefüllt.
Dann wird die Schleife gestartet, die alle Objekte des Arrays ausgeben soll. Als erstes wird das Objekt "figuren[0]" gelesen (also das Dreieck). Von dem Dreieck wird dann die Methode "gibInstanz()" aufgerufen, die aber durch das "return this" einfach sich selbst zurückgibt. Also quasi "Das Ergebnis der Funktion 'gibInstanz' bin ich selbst". Also kriegt die println-Methode das Dreieck-Objekt, um es aus der Console auszugeben. Das hätte es aber halt auch gekriegt, wenn man direkt figuren[0] an println übergeben hätte.
Allerdings, wenn du die Methode "gibInstanz" in der Klasse Dreieck überschreibst, kannst du auch was anderes zurückgeben. Du könntest sogar z.B. ein neues Rechteck zurückgeben, weil die Klasse auch von der Überklasse "GeometrischeFigur" erbt.
Danke für deine Erklärung. So wird es auf jeden Fall verständlicher.
Danke. Ehrlich gesagt sind mir deine Antworten aber nicht so ganz klar:
"In der main-Methode würde es also keinen Unterschied machen, ob du "System.out.println(figuren[i].gibInstanz())" oder nur "System.out.println(figuren[i])" schreibst."
=> Warum macht das jetzt hier keinen Unterschied? Wegen dem return this in der Methode gibInstanz()?