G
@Hilefoks: Das ist nicht der Vetrag, der mit clone verbunden ist. Bei clone geht es vielmehr darum, zu wissen, wie es richtig implementiert wird. Beispielsweise nutzt man in clone kein new, um sein Objekt zu erzeugen. Das macht man mit super.clone(). ...und danach überschreibt man alle Membervariablen (unter Umständen auch mit entsprechenden clones) mit den neuen Werten. Wenn Du clone anders implementierst, dann führt das zu bösartigem Code, der in anderem Code, der sich auf das korrekte Funktionieren des clones verlässt, zu Fehlern führen kann. Abgesehen davon verträgt sich clone in keinster Weise mit finalen Membervariablen. clone und final (bei Membervariablen) schließen sich praktisch gegenseitig aus.
Leider kennen viele den Vertrag von clone nicht und aus diesem Grund wird clone meistens fehlerhaft implementiert, was zu entsprechenden Bugs führen kann.
Ich empfehle, die Nutzung von Copy-Konstruktoren.