2016-03-02 82 views
2

我有這樣一個問題:是否有可能一些如何從一個對象「提取」超類到新對象?我會展示我的意思。Java只克隆超類

public class test { 

public static void main(String[] args) { 
    subclass sb = new subclass(false); 
    System.out.println(sb.a); 
    System.out.println(sb.b); 
    superclass sc = sb; 
    superclass sc2; 
    try { 

     sc2 = sc.clone(); 
    } catch (CloneNotSupportedException e) { 
     e.printStackTrace(); 
     return; 
    } 
    System.out.println(((subclass)sc2).a); 
} 

private static class superclass implements Serializable, Cloneable { 
    public boolean b; 
    public superclass() { 
     b = false; 
    } 
    public superclass(boolean a) { 
     this.b = a; 
    } 
    public superclass clone() throws CloneNotSupportedException { 
     return (superclass)super.clone(); 
    } 
} 

private static class subclass extends superclass implements Serializable{ 
    public boolean a; 
    public subclass(boolean a) { 
     super(true); 
     this.a = a; 
    } 
} 
} 

與此代碼我得到這樣的輸出:

false 
true 
false 

這意味着對象是完全克隆,BU我想克隆只有超類。

是否任何已經實現的方法來做到這一點,或者我必須在超類中實現我自己的字段到字段複製方法?

+0

爲什麼你想部分克隆一個對象?這會破壞clone()的合同。如果您只想複製對象的一部分,我強烈建議您考慮使用工廠方法或複製構造器。 – Laf

回答

0

不知道你真的想通過這個例子達到/證明什麼。即使可以僅克隆超類,結果仍然保持不變,因爲它只是簡單地複製a字段。

無論如何,答案是否定的。克隆是有目的的方法,所以你不需要在後臺關心真實的類。如果你希望對特定的超類進行部分克隆,你可以通過調用特定的構造函數/設置器來輕鬆實現這一點,因爲你擁有編譯時的所有信息。