Ein Objekt erzeugt ein anderes Objekt - Wie beide Objekte abspeichern?

DennisXX

Bekanntes Mitglied
Ich habe ein Objekt, dass bei seiner Erzeugung (also im Konstruktor) ein neues Objekt erzeugt. Diese beiden Objekte hängen inhaltlich fest zusammen. Die Trennung in zwei Objekte erfolgte aufgrund von Datenkapselung. Ich bzeihe mich hier auf das Beispiel "Gitarren" in "Objektorinierte Analyse und esign von Kopf bis Fuss".

Meine Frage ist nun: Wie kann diese beiden Objekte "zusammenhaltend" abspeichern? Ein einzelnes Objekte ürde ich einfach in eine LinkList und ArrayList oder Vector packen, aber bei zweien Objekten, die nur zusammen aufgerufen einen Sinn ergeben, wie mache ich das hier?
 
Java:
public class Klasse1 {
    private Klasse2 klasse2;

    public Klasse1() {
        klasse2 = new Klasse2(this);
        System.out.println(klasse2.gibMirEtwas());
    }

    public String gibMirEtwas() {
        return ":)";
    }
}

Java:
public class Klasse2 {
    private Klasse1 klasse1;

    public Klasse2(Klasse1 klas) {
        klasse1 = klas;
        System.out.println(klasse1.gibMirEtwas());
    }

    public String gibMirEtwas() {
        return ":D";
    }
}

Klasse1 und Klasse2 kennen sich. Das wird in den Variablen abgespeichert. Die Methoden kannst du dann einfach mit "variable.methode()" aufrufen.
 
Zuletzt bearbeitet:
@Ruzmanz

Danke für das Beispiel.

Nun zeige mir doch bitte mal Code, wo z.B. Klasse 1 in einer ArrayList oder LinkedList abgelegt wird (Klasse 2 soll auf automatisch mit darin abgelegt werden). Klasse 1 soll später aus dieser Liste NUR zusammen mit Klasse 2 ausgelesen werden können ABER NIEMALS alleine. Das ist das Problem was ich meinte. Wir das automatisch sichergestellt durch den Code?
 
Speicher das eine Objekt doch einfach im anderen ab und stelle für das innere einen getter bereit.
mfg
Eldorado

Das ist doch genau was du suchst, oder nicht ?

Java:
class Klasse1{

private Klasse2 k2;

public Klasse1(){
k2 = new Klasse2();
}

public Klasse2 getKlasse2(){
return k2;
}
}

Wenn du nun ein Objekt der Klasse1 in eine Collection packst und nachher wieder rausholst kommst du an die Instanz der Klasse2 nur dran, wenn du den Getter auf dem Objekt der Klasse1 aufrufst.
Code:
k1.getKlasse2()
 
Es ist richtig wie Lexi das erklärt.
Du speicherst einfach das eine Objekt im anderen ab.

Java:
class Klasse1{
 
private Klasse2 k2;
 
public Klasse1(){
  k2 = new Klasse2();
}
 
public Klasse2 getKlasse2(){
  return k2;
}
}

Und wenn du dann Klasse 1 erstellst wird automatisch Klasse2 mit generiert, da der Konstruktor von Klasse 1 aufgerufen wird.

So kommt man dann an Klasse2.
Java:
Klasse1 k1 = new Klasse1();
k1.getKlasse2();

Und jetzt erstellen wir ein paar mal Klasse1 und schreiben sie in eine ArrayList.
Java:
ArrayList<Klasse1> list = new ArrayList<Klasse1>();
list.add( new Klasse1() );
list.add( new Klasse1() );
list.add( new Klasse1() );

Und lesen sie wieder aus (3 Varianten)
Java:
for(int i=0;i<list.size();i++) {
  Klasse1 k = list.get(i);
  k.getKlasse2();
}

for(int i=0;i<list.size();i++) {
  list.get(i).getKlasse2();
}

for(Klasse1 k : list) {
  k.getKlasse2();
}

Hoffe das hilft.
 

Zurück
Oben