2010-11-21 6 views
0

J'ai donc les classes suivantes:Copier objets imbriqués dans Java

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

on me demande de définir la méthode copy() dans les classes A, B, C. La méthode de copie fait essentiellement une copie de tous les objets imbriqués.

J'ai 2 questions:

  1. Je ne vois pas d'objets imbriqués construits, pourquoi il ne m'a pas demandé de faire une copie de tous les objets imbriqués? Est-ce parce que quand je construis un objet de sous-classe, un objet de classe de base est construit et niche à l'intérieur de l'objet de la sous-classe?

  2. Est-il correct d'écrire la méthode comme suit (prendre la classe B par exemple):

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

Répondre

1

Je pense que vous confondez les concepts différents. Vous confondez le has-a relationship avec le is-a relationship.

Dans votre code C est un B et aussi un A: C a une relation is-a avec B et A.
C ne contient pas une instance de B ou A (ce serait une relation has-a) . Puisque C est un B et un A, il contient tous les membres de B et A. L'appel d'une copie de C va copier toutes ses variables membres. Vous n'avez pas besoin de créer une méthode particulière, vous pouvez simplement utiliser le already defined Object.clone method.

Si vous voulez définir votre propre méthode de copie/clonage, je vous suggère de regarder the following article on the subject.

Profitez-en!

+0

Merci pour votre réponse. Je comprends réellement la relation exprimée par l'héritage et la composition. Je suis juste confus par "objets imbriqués". Où diable sont les objets imbriqués dans ce cas ??? Et la méthode copy() fonctionne réellement. Je veux juste m'assurer que c'est ce que la question demande. – pippoflow

Questions connexes