Sub2拷贝构造函数如何自动从Sub1复制新成员变量?

时间:2011-08-13 03:35:53

标签: java oop inheritance

Sub2的目的是在Sub1的属性中保存快照。

e.g:

subService.update(sub1);
Sub2 sub2 = new Sub2(sub1);
subService.save(sub2);  

以下实现的问题是每当将新成员变量添加到Sub1时,程序员必须记住更改Sub2中的复制构造函数以将新成员从Sub1复制到Sub2 。 / p>

Sub2拷贝构造函数如何自动从Sub1复制新成员变量?

Sub1&的基类SUB2:

public class Base{

    protected String a;
    protected String b;
    protected String c;
    // ...
    protected String z;

}

Sub1的:

public class Sub1 extends Base {

    public Sub1(

        String a, 
        String b, 
        String c, 
        // ...
        String z){

        this.a = a;
        this.b = b;
        this.c = c;
        // ...
        this.z = z;

    }

}

分公司2:

public class Sub2 extends Base {

    public Sub2(Sub1 s1){

        this.a = s1.getA();
        this.b = s1.getB();
        this.c = s1.getC();
        // ...
        this.z = s1.getZ();         

    }


}

2 个答案:

答案 0 :(得分:0)

Java对C ++这样的复制构造函数没有特殊的概念,所以它只是另一个带参数的构造函数。如果不使用反射,您无法知道类在运行时具有哪些成员,但是我建议让Sub1负责存储其当前状态。例如,将存储方法添加到Sub1,它将返回一个字符串数组(其成员)。然后Sub2可以将这些数组存储在某个地方。向Sub1添加新成员时,还要更改Sub1的存储方法。这样您就不必触摸Sub1。

答案 1 :(得分:0)

在Sub1上实现“public Sub1 copy()”方法(或实现Cloneable)。当您需要Sub1实例的快照时,只需调用copy()或clone()。摆脱Base / Sub2。