# ClassCast



## Ferenjito (8. Mrz 2006)

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:


```
A a = Fabrik.getInstance();
 B b = (B)a;
```

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

Danke, Ferenjito


----------



## Beni (8. Mrz 2006)

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.


----------



## Ferenjito (8. Mrz 2006)

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:

```
B b = new B();

A a = b; // ohne Cast

----

A a = new A();

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

oder ist das falsch?


----------



## Beni (8. Mrz 2006)

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


```
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.


----------

