Java纯克隆超类
我有这样一个问题:是否有可能从一个对象到新对象“提取”超类?我会证明我的意思Java纯克隆超类,java,serialization,cloning,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; tr
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
这意味着该对象被完全克隆,但我只想克隆超类
这是一种已经实现的方法,还是我必须在超类中实现我自己的字段到字段复制方法?不确定您真正想通过示例实现/证明什么。即使可以只克隆超类,结果仍然保持不变,因为它只是复制
a
字段
无论如何,答案是否定的。克隆是方法的目的,所以你不需要关心背景中的真实类。如果您希望对特定的超类进行部分克隆,您可以通过调用特定的构造函数/设置器轻松实现,因为您在编译时拥有所有信息。为什么要部分克隆对象?这将破坏
clone()
的契约。如果您只想复制对象的一部分,我强烈建议您考虑使用工厂方法或复制控件。