• 28.04.2024, 09:09
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

powerslide

unregistriert

okeh -> Java .. klassen casten

Donnerstag, 29. Mai 2003, 15:33

okeh.. also da der andere inhalt des topics ja schon im forum existiert..

was anderes..

ich lern grad java..

aber für was kann oder soll ich klassen casten?

*nixversteh*

mfg

slide

Re: Wer will sich mal als hacker probieren?!

Donnerstag, 29. Mai 2003, 15:35

LiquidAcid

unregistriert

Re: okeh -> Java .. klassen casten

Donnerstag, 29. Mai 2003, 16:22

Also ich kann jetzt nur für C/C++ sprechen, aber da die Verwandtschaft zu Java sehr hoch ist, denke ich, dass das relativ gut passen wird.

Typecasting benutzt man in Klassenhierarchien. Wenn du eine Basis-Klasse hast und eine von dieser Basisklasse abgeleitete Klasse erstellst (und noch weitere Ableitungen), so kann man (zumindendestens unter C++) abgeleitete Klassen zur Basisklasse hin casten.
Ein Objekt (unter C++ funzt es nur mit Referenzen und Zeigern, normale Objekte arbeiten nicht polymorph) der abgeleiteten Klasse kann einem Zeiger der Basis-Klasse zugewiesen werden.

Deswegen müßte es auch eigentlich "Casten von Objekten" heißen und nicht "klassen casten", weil Klassen in dem Sinne keine Objekte sind. Erst eine Instanz einer Klasse ist dann ein Objekt.

Da ich mich nur wenig mit Java auskenne (ich könnte jetzt im Java2 Kompendium nachschlagen, steht bei mir im Bücherregal), würde ich an deiner Stelle nochmal selber nachschlagen.
Jedenfalls meine ich mich erinnern zu können, dass in Java sich alle Objekte (auch Basisdatentypen, wie integers, floats, etc.) von einem, Basis-Objekt (object oder so?) ableiten.
Diese Klassenhierarchie durchzieht also das ganze Java System.

Das tolle daran ist, dass jedes Objekt in Java auch gleichzeitig ein Objekt des Typs object ist, weil er ja (über Umwege) von ihm abgeleitet wird.

Noch kurz ein Beispiel (anhand meiner Engine). Ich habe eine Klasse, die sich generic_terrain nennt. Sie ist ADT (KA ob es das in Java auch gibt), jedenfalls kann man ADT-Klassen nicht erstellen, sie bilden nur Grundlage einer Klassenhierarchie. Instanzen von ADTs zu erstellen ist nicht möglich und resultiert in einem Compiler-Fehler.
Jetzt sind alle meine terrain-Klassen von generic_terrain abgeleitet. draw-Methoden, etc. wird alles virtuell überschrieben.

Das schöne daran ist, dass ich in meinem Scenegraph (der die Objekte handhabt) einfach ein generic_terrain Zeiger einfügen kann, der auf irgendeins dieser abgeleiteten Objekte zeigen kann. Ein Aufruf über diesen Zeiger (Dereferenzierung, etc.) ruft immer die richtige Methode auf (-> vtable).
Wenn ich jetzt irgendwo ein Objekt der Klasse triList_terrain (abgeleitet von generic-terrain) erstelle, dann kann ich dies dem Zeiger im Scenegraph zuordnen. Dabei wird automatisch gecastet, da der Zeigertyp nicht mit dem zugeordneten Objekt übereinstimmt, ABER eine Ableitung dessen ist.

Casting macht der Compiler entweder selber, oder du kannst es erzwingen. Up- bzw. Downcasting sind möglich. Du kannst also eine Objekt der Basis-Klasse hochcasten (auf einen abgeleiteten Typen), wenn du dir sicher bist, dass das auch geht (das ist schwierig rauszufinden).

cya
liquid

Re: okeh -> Java .. klassen casten

Donnerstag, 29. Mai 2003, 16:31

hmm.. wie erklärt man das... ich versuchs mal so:

bei java gibt es diese klassenhirarchie.
ganz oben ist object, andere klassen sind davon abgeleitet.

dann gibt es die collections bei java, oder auch anderes.
zB die Hashtable, eine art (also java-könner überlesen das bitte) assoziatives array.
in dieses array kann man nicht nur strings oder ints geben, sondern jedes object, also instanzen von object selber, aber auch alles was davon abgeleitet ist, zB eigene Klassen.

wenn man nun eine instanz aus der hashtable auslesen will (mit get()), dann bekommt man nur ein object zurück, und kann auch nur funktionen von object aufrufen, obwohl man ja eine eigene klasse mit mehr funktionen in die hashtable gegeben hat.

Um nun wieder an die eigenen klasse (bzw die instanz davon) zu kommen, muss man casten, dann hat man wieder eine instanz der eigenen klasse, und kann damit machen was man will.

riesiger vorteil dabei ist, das man hashtable (bzw eine eigene klasse) für jedes object benutzen kann, ohne es neu zu programmieren.

@Basisdatentypen:
int, float, byte usw sind nicht von object abgeleitet.
Wenn man sie zb in einen Hashtable bringen will, muss man sie in eine Wrapper-Klasse stecken, die den Wert speichert.
Das ist bei int etwa die Klasse Integer.
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.

LiquidAcid

unregistriert

Re: okeh -> Java .. klassen casten

Donnerstag, 29. Mai 2003, 16:49

Zitat von »crushcoder«

@Basisdatentypen:
int, float, byte usw sind nicht von object abgeleitet.
Wenn man sie zb in einen Hashtable bringen will, muss man sie in eine Wrapper-Klasse stecken, die den Wert speichert.
Das ist bei int etwa die Klasse Integer.

Jo stimmt, wußte dass ich da noch irgendwas vergessen hatte.
Bei C++ gibts nur keine Wrapper-Klassen, die Templates arbeiten eigentlich mit fast allen Datentypen zusammen (auto_ptr ist so eine Sache, lässt man lieber).

cya
liquid