![]() |
java - objekte der superklasse kopieren ?
hi leute,
angenommen ich habe: public class A public class B extends A A a = ... (wobei alle Attribute von A und B über Getter & Setter Methoden les/schreibbar sind) und möchte nun ein Objekt der Klasse B erzeugen aus dem existenten Objekt a und dann noch zusätzliche Attribute setzen. was ich halt irgendwie umgehen möchte ist: B b = new B(); b.setX(a.getX()); b.setY(a.getY()); ... Also ich möchte im Prinzip machen: B b = a; (Das funktioniert ja nicht) b.set... (zusätzliche attribute) Kann ich das irgendwie machen ohne dabei über Reflection das Resultat aller getter Methoden von a durch die Setter Methoden von b zu setzen ? Ein clone oder ähnliches zu verwenden, gfallt ma nicht, da bei erweiterungen auch darin änderungen gemacht werden müssten. any ideas ? danke, oliva |
So wie ich das verstehe hast du ein Objekt a der Klasse A und willst einem Objekt b der Klasse B die Eigenschaften von a zuweisen.
b=a wirft natürlich eine Exception. Du kannst aber einen Typecast machen: b=(B)a; Wenn ich deinen Post richtig verstanden habe, sollte es so funktionieren. Jak <edit>2 Tippfehler korrigiert</edit> |
Nein, ein Downcast ist nicht möglich. Kann auch gar nicht gehen, da die Kindklasse mehr Eigenschaften haben kann als die Mutterklasse.
Die einzige Möglichkeit ist jedes Feld entweder per Reflection oder per Hand aufs Kindobjekt zu übertragen. |
Ooops, stimmt natürlich.
Hab' anscheinend zu lange nicht mehr Java programmiert. Hab' das mit einem anderen Fall verwechselt (ich hatte eine Linked List aus A's die mit Objekten x1,x2,x3 der Klassen B,C,D gefüllt war; B,C,D waren Kinder von A und hab' daher D x4=(D)x3 machen können). Was du machen kannst ist, das du ein Objekt der Klasse B erzeugst und es in Methoden verwendest die Objekte der Klasse A erwarten: void setA(A myObj){ myObj.setusw... } Sollte man auch mit einem B füttern können (wenn ich nicht schon wieder Blödsinn red'). Jak |
Kinder haben ja gerade auch alle Eigenschaften der Mutterklasse und sind deswegen auch so verwendbar. Nur umgekehrt gehts halt nicht.
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag