OOP Up- und Down-Casting

Unsympath

Mitglied
Hallo,

beim Casting kann ich ja einen Datentypen in einen anderen umwandeln. Zum Beispiel bei der bekannten Methode equals:

Java:
public class MeineKlasse {
  private boolean var = true;

  public boolean equals(Object o) {
      MeineKlasse mk = (MeineKlasse) o;
      return mk.var == this.var;
  }
}

Hier wird ein Objekt eines allgemeineren Typs (hier Object) auf ein Objekt eines spezielleren Typen (hier MeineKlasse) gecastet.

Warum aber wirft dann der folgende Code-Schnipsel zur Laufzeit eine ClassCastException?:

Java:
class A {}
class B extends A {}
public class MeineKlasse{
    public static void main(String argv[]){
	A a = new A();
	B b = (B) a;
    }
}

Es ist doch genau dasselbe Prinzip: allgemeineres Objekt (hier a vom Typ A) wird gecastet auf spezielleres Objekt (hier b vom Typ B).

Warum also der Laufzeitfehler und im equals-Beispiel nicht?
 

Der Müde Joe

Top Contributor
>MeineKlasse mk = (MeineKlasse) o;

Auch das schmeisst ne ClassCastException, wenn das Object nicht wenigstens ein MeineKlasse ist..

Zum 2ten:
Ein A ist ein A..fertig.
Ein B ist ein A und ein B

A a = new A() --> A ist ein A, weiss nix von B
B b = (B)a; --> peng....A ist kein B

anders rum:
B b = new B() --> geht
A bb = new B() --> geht (B ist auch ein A)
A a = (A)b --> geht (B ist auch ein A (im Herzen) ;-)

EDIT:
Noch ein Nachtrag.
Object kann alles sein...drum lässt sich das auch in alles Casten.
A ist ein Object und ein A. Aber schon zur kompile Zeit kann es kein B sein.
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
>Wenn Object nur ein Object ist, kann ich es in nichts anderes casten.

Oh..Das steht ja falsch rum. Alles ist Object und alles kann auch in Object gecastet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
temi (Down-)Casting Problem Java Basics - Anfänger-Themen 5
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
M FTP Down-/Upload Java Basics - Anfänger-Themen 3
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
S Java und HTML- Drop Down- Mehrfachauswahl Java Basics - Anfänger-Themen 3
E Adobe Designer Drop Down Feld & If Abfrage Java Basics - Anfänger-Themen 4
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5
C Casting Java Basics - Anfänger-Themen 8
F Interface Casting Java Basics - Anfänger-Themen 13
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
X Datentypen Casting?! Java Basics - Anfänger-Themen 7
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
H Datentypen Casting objects Java Basics - Anfänger-Themen 29
S Class Casting Allgemein Java Basics - Anfänger-Themen 3
R Casting Problem Java Basics - Anfänger-Themen 15
D Arry Casting Java Basics - Anfänger-Themen 30
B Anfängerprobleme (Casting,...) Java Basics - Anfänger-Themen 5
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
D OOP casting/get & set Methoden Java Basics - Anfänger-Themen 7
J Type-Casting Java Basics - Anfänger-Themen 8
G Überschreiben von Methoden beim Casting Java Basics - Anfänger-Themen 7
T Casting von Objekten Java Basics - Anfänger-Themen 2
G Casting, Ordinalzahl eines Buchstabens? Java Basics - Anfänger-Themen 4
P Casting von Object zu (String || Integer) Java Basics - Anfänger-Themen 8
B Casting variabel gestalten. Java Basics - Anfänger-Themen 9
U casting: ArrayList to String[] Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben