Java克隆只有超类

时间:2016-03-02 16:15:30

标签: java serialization cloning

我有这样一个问题:是否有可能如何提取"提取"从一个对象到新对象的超类?我会说明我的意思。

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

这意味着对象被完全克隆,我想只克隆超类。

是否已经实现了这种方法,或者我必须在超类中实现我自己的字段到字段复制方法?

1 个答案:

答案 0 :(得分:0)

不确定你真正试图通过这个例子来实现/证明什么。即使有可能只克隆超类,结果仍然只是复制a字段。

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