Casting
-
Hallo.
Ich habe versucht eine Instanz von java.awt.Frame nach javax.swing.JFrame zu casten, erhalte bei der Ausführung aber eine ClassCastException.
Warum?
Beide Klassen sind doch durch Vererbung miteinander verbunden (JFrame erbt von Frame), daher müsste es ja funktionieren?Was habe ich übersehen?
Danke für eure Hilfe!
-
Ja! Du hast was übersehen! ...und zwar die Richtung der Vererbung. JFrame erbt zwar von Frame, Frame erbt aber nicht von JFrame.
Ein JFrame ist immer auch ein Frame, ein Frame muss aber kein JFrame sein.
-
Hast Recht, aber wenn ich explizit Caste, z.B so:
Frame frame = new Frame();
JFrame frame = (JFrame)frame;dann sollte es doch funktionieren.
-
Nein! Ein Frame ist i.A. kein JFrame. Also gibt es ne ClassCastException, wenn du das Frame auf ein JFrame casten willst.
-
Was mich etwas verwirrt ist folgendes Beispiel:
VicePresident ist eine Subklasse von Employee
Employee emp = new Employee();
VicePresident vice = new VicePresident();vice = (VicePresident)emp; //explizit gecastet.
Das ist doch das gleiche wie JFrame und Frame. JFrame ist eine Subklasse von Frame.
Sorry, stehe auf dem Schlauch
-
Noch eine andere Vererbungshierarchie ... vielleicht wirds dann deutlicher:
Automobil
+------ Mercedes Benz
+------ OpelJeder Opel ist ein Automobil. Aber aus einem Automobil allein ist noch lange nicht ersichtlich, dass es ein Mercedes ist wenn man sagt "Ich habe ein Auto"
-
Ich kapier ja schon, was ihr meint, aber das Beispiel mit Vice (aus einem Buch)
funktioniert doch!
-
Employee emp = new Employee();
VicePresident vice = new VicePresident();vice = (VicePresident)emp; //explizit gecastet
bist du sicher daß das Beispiel so rum war?
Employee emp=new VicePresident(); // <--so würds gehen
andersrum gibts ne Exception, alles andere würd mich doch sehr verwundern,
denn dann könnte man ja zB jede Methode die nur einem Vizepräsidenten zustehet, nicht aber jedem Angestellten aufrufen, obwohl das Objekt auf das man zugreift gar nicht die entsprechenden VVariablen etc. hat die zum Umsetzen dieser Methoden nötig sind
-
Zeig bitte den funktionierenden Code!
-
steht da auch der code für Employee und VicePresident drin? würd mich mal interessieren..andernfalls tipp ich doch auf druckfehler im buch;)
-
Hier mal der Link:
http://www.informit.de/books/java2/data/start.htmGeht zu Kapitel 4, dort der Punkt Konvertierung von Objekten....noch ein bisschen runterscrollen...und schon seid ihr da.
-
Was dort steht ist großer Müll! ...wie in jedem Buch von Markt&Technik, das ich kenne. ...dort soll etwas verdeutlicht werden, was so garnicht möglich ist.
Such dir ein vernünftiges Java-Buch. In der Java-FAQ ist ein Thread dazu.
-
is meiner ansicht nach einfach falsch...ein beweis daß das funktioniert gibts ja auch nicht oda?
-
Ha, Autsch! ...ist doch nicht falsch!
-
Jetzt weiss ich aber immer noch nicht, warum der Cast von
Frame nach JFrame nicht funktioniert.
-
...wir haben alle folgende Zeile übersehen:
emp = veep;
...Markt&Technik-Bücher sind trotzdem Mist.
-
habs auch grad gesehen
Das Beispiel is trotzdem Mist, was soll das bringen?!
-
Es funktioniert immernoch aus dem gleichen Grund nicht: Dein Frame ist kein JFrame.
In dem Beispiel in dem Buch funktioniert das, weil über die Employee-Varieble emp ein VicePresident referenziert wird. Den kann man natürlich wieder in einen VicePresident casten.
-
Frame frame = new Frame();
JFrame jframe = new JFrame();frame=jframe;
jframe=(JFrame) frame;
so würds funktionieren..wegen der 3. zeile
-
Würde das Beispiel auf funktionieren, wenn ich
emp = veep weglasse?
Oder ist das Voraussetzung, dass veep = (VicePresident)emp funktionert?
Das hatte ich nämlich nicht angenommen.