Ansicht:   

#205978

hannibal-007

24.04.2010, 22:17:15
(editiert von hannibal-007, 24.04.2010, 22:17:45)

Java: Objekt in einem Objekt: Methodenzugriff (ed) (pc.coding)

Hallo

Angenommen man hat ein Objekt einer Klasse A in dem per Konstruktor aus A ein Objekt der Klasse B erzeugt und als gleichnamiger Attributname in Objekt A gespeichert wird. Wie ruft man dann aus einer Methode der Klasse B die Klasse A auf? - sofern das geht.

#205984

MudGuard zur Homepage von MudGuard

München,
24.04.2010, 22:39:08

@ hannibal-007

Java: Objekt in einem Objekt: Methodenzugriff

> Hallo
>
> Angenommen man hat ein Objekt einer Klasse A in dem per Konstruktor aus A
> ein Objekt der Klasse B erzeugt und als gleichnamiger Attributname in
> Objekt A gespeichert wird. Wie ruft man dann aus einer Methode der Klasse B
> die Klasse A auf? - sofern das geht.

Kannst Du mal Code hinschreiben, was Du wo haben willst?

Meinst Du mit \"erzeugtes Objekt\" eine Instanz?

--
[image]
MudGuard
O-o-ostern

#205985

hannibal-007

24.04.2010, 22:48:31
(editiert von hannibal-007, 24.04.2010, 22:49:12)

@ MudGuard

Java: Objekt in einem Objekt: Methodenzugriff (ed)

Grob so:

public class B{
public B()

}

public void method1(){
// Aufruf methodObere
}

public class A{

private B B;

public A()
{
this.B = new B();
}

public void methodObere(){
}

}

#205988

d-fens

Bonn,
24.04.2010, 23:16:16
(editiert von d-fens, 24.04.2010, 23:17:42)

@ hannibal-007

Java: Objekt in einem Objekt: Methodenzugriff (ed)

Spontan so (blau sind meine Ergänzungen):

> public class B{
> public B(A refA)
>
> }
>
> public void method1(){
> refA.methodObere();
> }
>
> public class A{
>
> private B B;
>
> public A()
> {
> this.B = new B(this);
> }
>
> public void methodObere(){
> }
>
> }

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#205991

MudGuard zur Homepage von MudGuard

München,
24.04.2010, 23:21:08

@ d-fens

Java: Objekt in einem Objekt: Methodenzugriff

> Spontan so (blau sind meine Ergänzungen):

> > public class B{
> > public B(A refA)
> >
> > }
> >
> > public void method1(){
> > refA.methodObere();
> > }

Da fehlt aber das Speichern der Referenz auf A, sowie das Member, in dem die Referenz gespeichert wird ...

--
[image]
MudGuard
O-o-ostern

#205993

hannibal-007

24.04.2010, 23:23:48

@ MudGuard

Java: Objekt in einem Objekt: Methodenzugriff

Danke, kann man mehrere Referenzen anlegen (A kann ja auch irgendwo anders drin sein)?

#206208

MudGuard zur Homepage von MudGuard

München,
25.04.2010, 21:06:12

@ hannibal-007

Java: Objekt in einem Objekt: Methodenzugriff

> Danke, kann man mehrere Referenzen anlegen (A kann ja auch irgendwo anders
> drin sein)?

Ja:

Object a = new Object();

Object b = a;

Schon hast Du 2 Referenzen.

--
[image]
MudGuard
O-o-ostern

#206210

hannibal-007

25.04.2010, 21:10:10

@ MudGuard

Java: Objekt in einem Objekt: Methodenzugriff

Thx

#206000

d-fens

Bonn,
24.04.2010, 23:48:55

@ MudGuard

Java: Objekt in einem Objekt: Methodenzugriff

> > Spontan so (blau sind meine Ergänzungen):
>
> > > public class B{
> > > public B(A refA)
> > >
> > > }
> > >
> > > public void method1(){
> > > refA.methodObere();
> > > }
>
> Da fehlt aber das Speichern der Referenz auf A, sowie das Member, in dem
> die Referenz gespeichert wird ...

[image]

Ist halt schon spät, und Java ist ein paar Jahre her ...  ;-)

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#205990

MudGuard zur Homepage von MudGuard

München,
24.04.2010, 23:19:16

@ hannibal-007

Java: Objekt in einem Objekt: Methodenzugriff

Ah. Ok.

In A wird also eine Referenz auf die Instanz B der Klasse B abgelegt.
(Warum eigentlich B statt b für die Instanz? Üblich ist, daß Klassennamen mit Großbuchstaben beginnen, Instanznamen mit Kleinbuchstaben.)

Da es aber (vielleicht nicht in Deinem Fall, aber im Allgemeinen) viele Referenzen auf die Instanz geben kann, gibt es keinen direkten Weg.

Es ginge, wenn man im Konstruktor von B eine Referenz auf eine Instanz von A mitgibt, also in etwa so:


public class B {
  A a; 

  public B(A a)
  {
    this.a = a;
  }  

  public void someMethod()
  { 
    if (a != null) //*)
    {
      a.someOtherMethod();
    }
  }
}



*) die Null-Prüfung kann man sich sparen, wenn man bereits im B-Konstruktor eine Exception wirft, falls a null ist.

An der Stelle in Klasse A, an der B erzeugt wird, wird dann halt new B(this); statt new B(); gemacht.

--
[image]
MudGuard
O-o-ostern

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz