0

所以我有以下课程:

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

我被要求copy()在 A、B、C 类中定义方法。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;
    }
}
4

1 回答 1

1

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

您将has-a 关系is-a 关系混淆了。

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

由于 C 是 B 和 A,它包含 B 和 A 的所有成员。调用 C 的副本将复制其所有成员变量。你不需要创建任何特定的方法,你可以使用已经定义的 Object.clone 方法

如果您想定义自己的克隆/复制方法,我建议您查看以下有关该主题的文章

享受 !

于 2010-11-21T12:11:16.153 回答