#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 
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]](https://www.andreas-waechter.de/Bilder/Menu/Waechter.png)
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)
|
#205990 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]](https://www.andreas-waechter.de/Bilder/Menu/Waechter.png)
MudGuard
O-o-ostern
|
#205991 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]](https://www.andreas-waechter.de/Bilder/Menu/Waechter.png)
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)?
|
#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]](http://www.abload.de/img/yoda-haste-rechti4re.jpg)
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)
|
#206208 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]](https://www.andreas-waechter.de/Bilder/Menu/Waechter.png)
MudGuard
O-o-ostern
|
#206210 hannibal-007
25.04.2010, 21:10:10
@ MudGuard
|
Java: Objekt in einem Objekt: Methodenzugriff |
Thx
|