2014-02-21 5 views
6

Wenn eine Klasse A macht öffentliches clone() Methode des Objekts:Was ist instanceof eines geklonten Objekts?

@Override 
public Object clone() { 
    return super.clone(); 
} 

Wie wird die instanceof (oder getClass()) eine Instanz erstellt Aclone() mit?
Wie wäre es mit Instanzen von class B extends A erstellt mit der clone() Methode?

EDIT
Klarstellung: Ich frage das, weil auch vor dem Kompilieren, Java-Editor von Eclipse erfordert der zurück clone() Instanz mit dem zugeordneten Objekt zu werfen. Die darauf schließen lassen, dass die zurück Klasse ist Object (die es technisch ist, aber alle Antworten sagen, so weit die Klasse sollte A sein)

A original = new A(); 
A cloned1 = original.clone(); // Eclipse marks this as error 
A cloned2 = (A) original.clone(); // This is OK 
+0

die Antwort aktualisiert haben einen Blick !! –

Antwort

2

Das selbe wie der Initiator bedeutet die ursprüngliche Elternklasse, die immer Object.clone() verwendet, indem sie den super.clone() aufruft. Für mehr Besuch

http://howtodoinjava.com/2012/11/08/a-guide-to-object-cloning-in-java/

https://www.artima.com/objectsandjava/webuscript/ClonCollInner1.html

+0

Hallo, gibt es einen Weg, wie Sie den Inhalt der Links in Ihrer Antwort zusammenfassen könnten. Es würde Ihre Antwort wesentlich besser machen und nicht auf externes Material angewiesen, das jederzeit entfernt werden könnte. Vielen Dank! – Ben

+0

Dieser Beitrag wurde in der Überprüfungswarteschlange angezeigt, um markiert oder gelöscht zu werden. Bitte vermeiden Sie nur Link-Antworten. Ich habe auch einen Kommentar zu einigen Ihrer Antworten hinterlassen. Pls Bearbeiten und Verfassen oder Veröffentlichen von Links als Kommentare, da Sie genug Reputation haben – Raghunandan

3

Es wird die gleiche Art wie das ursprüngliche Objekt sein, solange es verwendet Object.clone() durch Anruf super.clone() und sollte durch convention getan werden.

Lesen Sie die doc here.

Dies druckt String aber es ist falsch von convention:

public class SomeTest { 
    @Override 
    protected Object clone() { 
     return ""; 
    } 
    public static void main(String[] args) { 
     System.out.println(new SomeTest().clone().getClass().getSimpleName()); 
    } 
} 
2

Es sollte eine Instanz der übergeordneten Klasse sein. Aber das beruht darauf, dass der Implementierer eine herkömmliche Methode schreibt.

In diesem und anderen Punkten ist das Klonen in Java ziemlich kaputt.