【问题标题】:Copy nested objects in Java在 Java 中复制嵌套对象
【发布时间】:2010-11-21 11:36:46
【问题描述】:

所以我有以下课程:

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()。 copy 方法本质上是复制所有嵌套对象。

我有两个问题:

  1. 我没有看到正在构造任何嵌套对象,为什么他要我复制所有嵌套对象?是不是因为我在构造子类对象的时候,构造了一个基类对象并嵌套在子类对象里面?

  2. 这样写方法是否正确(以B类为例):

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;
    }
}

【问题讨论】:

    标签: java inheritance copy deep-copy


    【解决方案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

    享受吧!

    【讨论】:

    • 感谢您的回答。我其实理解继承和组合所表达的关系。我只是对“嵌套对象”感到困惑。在这种情况下,嵌套对象到底在哪里???并且 copy() 方法确实有效。我只是想确保这就是问题所要求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2016-12-12
    相关资源
    最近更新 更多