# objecte ohne instanzierung verwenden



## hilroy (25. Okt 2005)

Habe folgende Verstaendnisprobleme:

1.

```
class A {
  private classB b;

  public A (classB b1) {
    b = b1;
  } // constructor

} // class A
```
Warum kann ich jetzt b ganz normal verwenden, ohne jemals eine Instanz dieses Objektes angelegt zu haben?
Selbiges Problem habe ich mit einigen anderen Objekten anderer Klassen, die in class A verwendet werden, ohne jemals angelegt zu werden. Wie ist das moeglich?

Thx for help,
hilroy


----------



## Roar (25. Okt 2005)

Auto meinAuto = null;
meinAuto.getFarbe();
denk mal drüber nach: wie soll das gehen? ich hab mir nie ein auto angelegt, ergo hab ich auch keine farbe und es kann mir nix zurückliefern, da fliegt ne exceptino. kein auto, keine farbe.
schnapp dir mal nen schönes OOP buch


----------



## hilroy (25. Okt 2005)

das ist mir schon klar, dass es normalerweise nicht gehen kann... drum frage ich ja ... das Problem ist naemlich ich arbeite grade bestehenden Code durch und es funktioniert, keine Exception, nix...


----------



## clemson (25. Okt 2005)

hmm, du musst ja der methode ein objekt übergeben, und wenn du es schon nicht in der methode erstellst, so erstellst du es eben vorher...

so

```
classB cb = new classB();
new A(cb);
```

oder so

```
new A( new classB() );
```


----------



## Sky (25. Okt 2005)

hilroy hat gesagt.:
			
		

> das Problem ist naemlich ich arbeite grade bestehenden Code durch


Benutzt Du eine IDE? Viele bieten Funktionen wie "suche alle Verwendungen" oder "suche alle Deklarationen" u.v.m.
Das hilft oft bei "fremdem" Code


----------



## hilroy (25. Okt 2005)

Noe, also nach Deklarationen zu suchen, hab ich schon versucht, in der Klasse wird dieses Objekt mit Sicherheit nicht angelegt. Ich kanns mir nur so erklaeren, dass irgendwas (mir nicht erklaerbares) passiert, wenn ich das Objekt der anderen Klasse im Konstruktor mitgebe und dann meiner Membervariable zuweise.


----------



## Sky (25. Okt 2005)

Also, clemson hat doch beschrieben, wie der Aufruf (irgendwo anders) aussieht. Was ist da dein Verständnisproblem ?


----------



## Bleiglanz (26. Okt 2005)

natürlich kannst du in A dein b so verwenden wie du willst

solange nieman new A(null) aufruft ist das auch kein Problem, höchstwahrscheinlich steht irgendwo mal ein

new A(new B())



> Warum kann ich jetzt b ganz normal verwenden, ohne jemals eine Instanz dieses Objektes angelegt zu haben?


weil du in einer Klasse arbeitest, die davon ausgeht, dass das B an anderer Stelle mit new erzeugt wird?!

BTW: es könnte auch sein, dass du in einer Library herumpfuscht und also NIE irgendwo ein B erzeugt wird, das machen dann ganz andere Programmierer in ganz anderen Projekten


----------



## hilroy (26. Okt 2005)

Danke fuer eure Antworten, bin gestern ein wenig am Schlauch gestanden wie es aussieht. Die Klasse, die die meisten meiner Objektinstanzen erzeugt, war ziemlich gut versteckt, bin aber noch fuendig geworden.


----------

