Hallo
Ich habe eine Klasse namens Isogon.
Und in der Aufgabe steht dass die Methode so aussehen muss:
public Isogon kopiere(){
}
Und diese Methode soll nun zuende geschrieben werden.
Aufgabe : "Die Methode kopiere soll eine Kopie des Isogons als neues Objekt zurückgeben. Sie müssen demnach in der Methode ein neues Objekt vom Typ Isogon erzeugen mit identischen Eigenschaften."
Mir begegnet sowas zum ersten Mal. Wie kann man in einer Methode ein Objekt kopieren???
irgendwo muss new Isogen(...) aufrufen werden je nachdem, welche Konstruktoren es gibt. Entweder werden alle Attribute per Konstruktor übergeben oder dann entsprechend gesetzt.
Du musst dafür erstmal wissen was dein Isogon ausmacht.
Ein Objektzustand wird immer von seinen Attributen bestimmt.
Eine Kopie erzeugst du also, wenn du eine neue Instanz der Klasse Isogon erstellst und in diesem Objekt die gleichen Attribute deines ursprünglichen Objektes setzt.
Dann bitte die Getter nicht vergessen.
Die Benutzung eines CopyConstructors ist nicht sehr clean.
Der Vorteil einer kopiere() / copy() Methode ist es, das du anhand des Namens sofort weißt was gemacht wird
Der Copy-Ctor ist bei C++ ein Sprach- und Compiler-Feature. Unter Java ist er das nicht, ich würde dieses Idiom deshalb nicht auf Java übertragen.
Es hat auch den Nachteil, das es mit Polymorphy schlecht funktioniert. Weil dann nicht zwangsweise der richtige Copy-Ctor aufgerufen wird, da es ja keine Ctors mit Latebinding gibt. Ich müsste ja erstmal den Typ raus finden. Lasse mich aber gerne eines besseren belehren.
Wenn ich aber eine Copy-Methode aufrufe, ist das per Latebinding, da muss ich als Aufrufer nichts über den genauen Typ wissen.
ich hab mich nur an die Aufgabenstellung gehalten.
Ausgabe... von heute Nachmittag... wenn ich mich noch recht erinnere...
false
false
true
Das Unterschied einer flachen Kopie. Im Englischen: Shallow
Für eine Nicht-Flache-Kopie müsste er sich jetzt etwas ausdenken. Ich sag auch nicht, wie heißt. Das Beispiel ist weiter aber schlecht gewählt, mit Strings, unveränderlich.
Ich wollte nur darauf aufmerksam machen,
dass es wichtig ist, WIE alle Attribute kopiert werden.
Also
[x] neues Objekt
[ ] neue Attribute
[x] der gleiche Inhalt
[x] derselbe Inhalt
usw.
DAS stand aber nicht in der Aufgabenstellung, deshalb ich .clone() nicht pauschal als falsch bewerten.
Außerdem Attribut vielleicht eine Liste an Objekte... Nicht nur die Liste neu erstellen? Auch die Objekte neu erstellen? Das alles mit schreiben.