Копировать вложенные объекты в Java - PullRequest
0 голосов
/ 21 ноября 2010

Итак, у меня есть следующие классы:

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 по сути делает копию всех вложенных объектов.

У меня есть 2 вопроса:

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

1 Ответ

1 голос
/ 21 ноября 2010

Я думаю, вы путаете разные понятия.

Вы путаете имеет-отношение с есть-отношение .

В вашем коде C есть B, а также A: C имеет отношение is-с B и A.
C не содержит экземпляров B или A (это будет отношение has-a).

Поскольку C - это B и A, он содержит все члены B и A. Вызов копии C приведет к копированию всех его переменных-членов. Вам не нужно создавать какой-либо конкретный метод, вы можете просто использовать уже определенный метод Object.clone .

Если вы хотите определить свой собственный метод клонирования / копирования, я предлагаю вам взглянуть на следующую статью по теме .

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...