2016-03-02 80 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字段。

无论如何,答案是否定的。克隆是有目的的方法,所以你不需要在后台关心真实的类。如果你希望对特定的超类进行部分克隆,你可以通过调用特定的构造函数/设置器来轻松实现这一点,因为你拥有编译时的所有信息。