Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hab mal wieder eine Frage. Wie kann ich in einen Interface die clone-Methode für alle implementierenden Klassen vorschreiben. Habe bisher als Rückgabetyp einfach nur die Klasse selbst gemacht, aber das hätte mit der clone-Methode von Object rein gar nichts zu tun.
Ich möchte nun aber einfach, dass eine an eine Methode übergeben Geoemtry (Interface Geometry) geklont werden kann, ohn erst jedes Mal prüfen zu müssen, von welcher Klasse die Geometrie nun tatsächlich ist...
Klar kann ich, aber ergbit das Sinn? Eine Methode clone (die von Object kommt) UND eine copy-Methode (die im Interface deklariert wird)?
EDIT: Wie ich gerade festgestellt hab, kann ich zwar kein @Override verwenden, aber der Compiler check trotzdem, dass die clone-Methode von Object überschrieben wird... also was soll´s
In einer Klasse Test kannst du folgendes problemlos schreiben:
Java:
@Override
public Test clone() throws CloneNotSupportedException {
return (Test) super.clone();
}
Das liegt meines Wissens daran, dass du beim Überschreiben von Methoden den Rückgabewert enger fassen darfst und da Object das allgemeinste ist, was es so gibt, kannst du da eben deinen Typen hinschreiben. Genauso kann man die Sichtbarkeit einer Methode ändern wie du oben siehst, dann ist clone() nicht mehr protected, sondern public. Man darf die Sichtbarkeit erhöhen.
Das liegt meines Wissens daran, dass du beim Überschreiben von Methoden den Rückgabewert enger fassen darfst und da Object das allgemeinste ist, was es so gibt, kannst du da eben deinen Typen hinschreiben. Genauso kann man die Sichtbarkeit einer Methode ändern wie du oben siehst, dann ist clone() nicht mehr protected, sondern public. Man darf die Sichtbarkeit erhöhen.
Ja, das war mir durchaus bewusst.
Den beitrag mit dem broken clone bin ich mal überflogen. In den Implementierungen meiner clone-Methide ruf ich aber sowieso nie das super.clone() auf, ich nutze dafür sowieso einen Kopierkonstruktor. Die heißt halt einfach nur clone(), weil viele Nutzer eben bei jedem Objekt eine cline erwarten und ich keine Funktion bereitstellen wollte, die ihrerseits "random behaviour" aufweist. Würde ich copy verwenden, hätte ich ja immer noch die clone am Hals, was für sich genommen nicht schlimm ist, aber dann hätte ich zwei Funktionen, die haar genau das selbe machen (sollen), was irgendwie etwas veriwrrend wäre...