Casting
-
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.
-
völlig sinnlose Anwendung eines Casts...und das soll Anfägern den Sinn eines Casts klar machen
-
Das Beispiel würde nicht mehr funktionieren, wenn du das wegläßt. Ein "Downcast" geht nur, wenn es sich auch tatsächlich um ein Objekt des Typs handelt, auf den du casten möchtest.
-
Na, etwas verwirrt bin ich jetzt schon....
fasse ich kurz zusammen (aber besser Schritt für Schritt;-)):
Subklasse sub, Superklasse super gegeben:
super = sub; //Nach Buch-Beispiel-Kommentar wird ja gecastet.
-> D.h. was sub zusätzlich konnte, das ist jetzt "abgeschnitten". Eigentlich
habe ich ja wieder das gleiche Objekt super, wie zuvor.
-
genau...vice oder veep oder wie es auch hieß verweist am Ende wieder aufdasselbe Objekt wie schon nach der 2. Zeile
-
Ok....
der nächste Schritt ist dann:
sub = (Subklasse) super;
Frage a)
Alleine funktioniert diese Anweisung nicht.
Ich kann aus Frame kein JFrame machen, also nicht irgendwie die zusätzlichen
Funktionalitäten dieser Klasse herzaubern. Richtig?Frage b)
Weil ich aber super eine Referenz auf Subklasse zugewiesen habe, funktioniert das Beispiel. Jetzt frage ich mich nur, warum ich dann noch nach Subklasse
casten muss, wenn doch schon die Referenz auf Subklasse gesetzt wurde?sub = (Subklasse) super;
oder
vice = (VicePresident) emp; //Der emp ist doch schon ein vice nach emp = vice.
//Warum also noch casten?