ClassCast

Status
Nicht offen für weitere Antworten.
F

Ferenjito

Gast
Erstmal denke für die letzte Antwort,

es stellt sich gleich die nächste Frage:

Wieder die zwei Klassen A und B mit B extends A.


Nun wird bei mir eine CLassCastException geworfen:

Code:
 A a = Fabrik.getInstance();
 B b = (B)a;

Das sollte doch eigentlich so funktionieren, oder?
Woran könnts liegen?

Danke, Ferenjito
 
B

Beni

Gast
Jede Socke ist ein Kleidungsstück, aber deswegen ist nochlange nicht jedes Kleidungsstück eine Socke...

Oder anders: "B extends A" bedeutet: Jedes B ist ein A. Aber der Umkehrschluss gilt nicht.
 
F

Ferenjito

Gast
Das ist mir schon klar, aber ich kann in Java in der Regel ein Kleidungsstück auf einen Socken runtercasten, wenn mich nicht alles täuscht:

Also bei B extends A sollte gehen:
Code:
B b = new B();

A a = b; // ohne Cast

----

A a = new A();

B b = (B)a; // mit Cast

oder ist das falsch?
 
B

Beni

Gast
Du täuschst. Casten von A nach B funktioniert nur, wenn in der Variable a bereits ein B ist:

Code:
A a = new B();
B b = (B)a;
funktioniert, weil a ein B referenziert.

Du musst unterscheiden zwischen "Typ der Variable" und "Objekt das zur Laufzeit referenziert wird".
Wenn deine Kleidungsstück-Variable eine Socke referenziert, kannst du einen Cast auf Socke machen. Wenn die Kleidungsstück-Variable eine Hose referenziert, kommt ein Cast nicht gut raus... auch wenn beidesmal derselbe Code ausgeführt wird.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben