Objekte casten - Informationsverlust?
-
Hallo ich habe eine Klasse mit zwei verschiedenen Konstruktoren. Dem einen Konstruktor wird als Parameter ein Objekt vom typ x übergeben dem 2ten vom typ y. Sowohl x als auch y sind Unterklassen von Z. Pseudocode:
[java]
public class V {Z _z = null; //z ist Superklasse von x und y
public V(X _x) {
_z = _x;
}public V(Y _y) {
_z = _y;
}
}
[/code]GEht beim cast im Konstruktor jetzt informationen verloren? Klasse x und y implementieren methoden bzw membervariablen die Z nicht hat. gehen diese beim cast verloren?
Falls das ohne Problem geht, wäre es ein besserer stil nur einen Konstruktor zu machen (mit Z als Parameter) und dan beim erstellen eines neuen objekts den Parameter vorher zu casten?
Die Sache ist das ich eben die Klasse V mit zwei unterschiedlichen Übergabe - Objekten verwenden will. In der Klasse V wollte ich dann einen aufruf machen ala
if( _z instanceof do s.th.
if( _z instanceof Y) do s.th else..
irgendwie gefällt mir das alles nicht... *HELP*
-
Hallo,
also es gehen keine Informationen verloren, da X und Y
ja beide auch vom Typ Z sind, es handelt sich ja bei Vererbungen
um "is-a" Beziehungen.Was sich letztendlich hinter der Referenz _z verbirgt ist ein Objekt
vom Typ X oder Y, so kannst du durch casten immer noch die überschriebenen
Methoden in X oder Y aufrufen und mitinstance of
auch herausfinden zu welcher Klasse das Objekt gehört,
welches sich hinter _z versteckt.Allerdings ist dies nicht notwendig, da es der Polymorphismus in java
selber regelt. Also wenn du in X und Y ein Methode test() von Z
überschreibst, wird immer die richtige benutzt, wenn du die
Referenz _z folgendermaßen benutzt _z.test().Falls du Z nicht instanziieren willst, würde ich die Klasse Z abstract
machen.Hoffe es hilft ein wenig,
Gamba
-
jep hat geholfen. so kann ich es abgeben und warten was der chef dazu meint..