2010-11-21 5 views
0

So habe ich die folgenden Klassen:Kopieren verschachtelte Objekte in 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(); 
    } 
} 

ich gefragt werde die Methode copy() in den Klassen A, B, C zu definieren. Die Kopiermethode erstellt im Wesentlichen eine Kopie aller verschachtelten Objekte.

Ich habe 2 Fragen:

  1. Ich sehe keine verschachtelten Objekten aufgebaut ist, warum er mich bittet, eine Kopie aller verschachtelten Objekten zu machen? Liegt es daran, dass beim Erstellen eines Unterklassenobjekts ein Basisklassenobjekt erstellt wird und innerhalb des Unterklassenobjekts verschachtelt wird?

  2. Ist es richtig, die Methode zu schreiben, wie (nehmen Klasse B zum Beispiel) folgt:

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

Antwort

1

Ich glaube, Sie, um unterschiedliche Konzepte sind verwirrend.

Sie verwechseln die has-a relationship mit der is-a relationship.

In dem Code C ist ein B und auch eine A: C hat ein ist-ein-Beziehung mit B und A.
C keine Instanz B enthält oder A (das wäre eine HAS-a-Beziehung) .

Da C ein B und A ist, enthält es alle Mitglieder von B und A. Wenn eine Kopie von C aufgerufen wird, werden alle seine Membervariablen kopiert. Sie müssen keine bestimmte Methode erstellen, Sie können einfach already defined Object.clone method verwenden.

Wenn Sie Ihre eigene Klon/Kopie-Methode definieren möchten, schlage ich vor, Sie sehen the following article on the subject.

Viel Spaß!

+0

Danke für Ihre Antwort. Ich verstehe die Beziehung, die sich durch Vererbung und Komposition ausdrückt. Ich bin gerade von "verschachtelten Objekten" verwirrt worden. Wo zum Teufel sind die verschachtelten Objekte in diesem Fall ??? Und die Methode copy() funktioniert tatsächlich. Ich möchte nur sichergehen, dass es das ist, wonach die Frage fragt. – pippoflow