2014-02-21 83 views
6

如果一個類一個使得公共對象的clone()方法:什麼是克隆對象的instanceof?

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

會是怎樣的instanceof(或getClass())使用clone()創建的一個一個實例?
那麼使用clone()方法創建的class B extends A實例呢?

編輯
澄清:我問這個,因爲即使在編譯之前,Eclipse Java編輯器需要投返回的clone()實例分配的對象。這表明,返回的類是Object(這在技術上是這樣,但所有的答案至今說的類應該是A)

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

答案被更新一看! –

回答

2

與啓動程序相同意味着始終通過調用super.clone()始終使用Object.clone()的原始父類。欲瞭解更多請訪問

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

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

+0

嗨,有沒有什麼方法可以總結鏈接的主題到你的答案。這會讓你的回答好得多,而不依賴於外部材料,這些材料可以隨時取消。謝謝! – Ben

+0

這篇文章已經彈出在審查隊列中被標記或刪除。請避免鏈接唯一的答案。我也在之前對你的答案留下了評論。由於您有足夠的聲譽,請編輯和詳細說明或發佈鏈接作爲評論 – Raghunandan

3

這將是同一類型與原始對象,只要它使用Object.clone()通過調用super.clone()應該convention完成。

閱讀doc here

這將打印String但通過convention是錯誤的:

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

應該是父類的一個實例。但是這依賴於實施者編寫傳統的clone方法。

在這個和其他方面,在Java中的克隆是相當破碎的。