在Java中复制嵌套对象

时间:2010-11-21 11:36:46

标签: java inheritance copy deep-copy

所以我有以下课程:

class A{
    public A(int n1){
        n=n1;
    }
    int n;
}

class B extends A{
    public B(int n2){
        super(n2);
        cnt=1;
    }
    int cnt;
}
class C extends B{
    public C(int n3){
        super(n3);
        clr="red";
    }
    String clr;
}

public class Driver {
    public static void main(String[] args){
        A a,b,c,d,e;
        a=new B(200); d=a.copy();
        b=new C(100); e=b.copy();
    }
}

我被要求在A,B,C类中定义方法copy()。复制方法基本上复制了所有嵌套对象。

我有两个问题:

  1. 我没有看到任何嵌套对象被构造,他为什么要我复制所有嵌套对象?是因为当我构造一个子类对象时,会构造一个基类对象并嵌套在子类对象中吗?

  2. 如下编写方法是否正确(以B类为例):

  3. class B extends A{
        public B(int n2){
            super(n2);
            cnt=1;
        }
        int cnt;
        public A copy(){
            A copy_ref=new B(1);
            ((B)copy_ref).cnt=this.cnt;
            copy_ref.n=super.n;
            return copy_ref;
        }
    }
    

1 个答案:

答案 0 :(得分:1)

我认为你对不同的概念感到困惑。

您将has-a relationshipis-a relationship混淆。

在你的代码中,C是B,也是A:C与B和A有一个is-a关系。
C不包含B或A的实例(这将是一个has-a关系)。

由于C是B和A,它包含B和A的所有成员。调用C的副本将复制其所有成员变量。您无需创建任何特定方法,只需使用already defined Object.clone method

即可

如果您想定义自己的克隆/复制方法,建议您查看the following article on the subject

享受!