PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cast Problem bei Vererbung mit Java



[_El_ReSeT_]
16-06-2004, 10:23
Hallo,

ich habe ein kleines Problem mit der Vererbung

Ich habe eine Superklasse Channel. und RGBVertex der von Channel abgeleitet ist. Nun möchte ich aber ein Channel Objekt zu einem RGBVertex Object casten:

class RRGVertex extends Channel {

...

public void addEdge(Channel edge) {
RRGVertex _edge;
_edge = (RRGVertex) edge;
...
}

Jedoch macht er statt eines Casts einen Fehler, wie kann ich das Channel Objekt zu einem RRGVertex Object casten.

Danke Reset

peschmae
16-06-2004, 10:32
was ist denn die Fehlermeldung?

Du bist dir doch schon bewusst, dass das was der Funktion als "Channel edge" übergeben wird in Wirklichkeit ein RRGVertex sein muss damit das Casten geht, oder?

MfG Peschmä

fs111
16-06-2004, 11:31
Was für eine Exception tirtt denn auf "ClassCastException", oder was anderes?

fs111

Alex_K
16-06-2004, 12:43
die frage ist, was kommt genau, eine fehlermeldung (es wird nicht fertig kompiliert) oder eine warnung?
kommt das problem überhaupt schon beim kopilieren, oder erst bei der ausführung?

das problem ist jedenfalls dass es sich um einen unsicheren cast handelt.
d.h. du willst nach unten casten, wobei es aber nicht sicher ist das es sich tatsächlich um ein objekt dieser klasse handelt.

du solltest auf jedenfall mal konrollieren ob es sich bei edge wirklich um ein RRGVertex-objekt handelt, also z.b:



public void addEdge(Channel edge) {

RRGVertex _edge;

if (edge instanceof RRGVertex)
_edge = (RRGVertex) edge;
else
/* fehlerbehandlung */
...
}

[_El_ReSeT_]
16-06-2004, 23:29
Vielen dank fur eure Hilfe, leider habe ich herausbekommen, das es gar nicht so geht, wie ich es mir vorgestellt habe.
Jetzt mache ich es nicht mehr so, daß ich das Object caste sondern, daß ich einfach mit dem Super Objekt Initialisiere, das macht im Grunde keinen Unterschied.

Vielen Dank
Reset

Thomas Engelke
23-06-2004, 18:43
Man kann nicht die Vererbungslinie heruntercasten, da die abgeleitete Klasse Features besitzt, die die Mutterklasse nicht besitzt.

TME

peschmae
23-06-2004, 19:32
Sie muss nicht, aber sie kann. Deshalb kann man das generell nicht wenn es nicht auch ein Objekt der Cast-Ziel-Klasse (oder einer noch tiefer unten im Vererbungsbaum liegenden Klasse) ist

MfG Peschmä