Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java 7 Grundkurs

Ich bin, was ich bin: Typumwandlungen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Neue Klassen zu deklarieren, bedeutet letztlich, einen neuen Typ zu erstellen. Sehen Sie im Beispiel, wie man es macht und was Sie dabei beachten müssen.
06:44

Transkript

Wenn ich eine neue Klasse deklariere, dann lege ich einen neuen Typ an, wie z. B. hier diese Klasse "Cabrio". Das ist ein neuer Typ. Wenn ich von dieser Klasse jetzt Exemplare erzeuge, dann sind diese vom Typ "Cabrio". Um das auch praktisch sehen zu können, legen wir einmal eine neue Testklasse an. Ich klicke dazu auf dieses Package "Autos", in dem sich bereits die Klasse "Auto-Demo" befindet, mit der rechten Maustaste also auf das Paket, sage "New Java Class", und dann gebe ich hier an "Typen". In dieser Klasse wollen wir ein paar Typ-Sachen ausprobieren und deshalb nennen wir sie auch "Typen". Als Package ist bereits "Autos" vorausgewählt. Ich brauche also nur noch auf "Finish" zu klicken und die Klasse wird generiert. Um auch etwas zu haben, was wir ausführen können, fügen wir eine Main-Methode hinzu. Das können wir durch das Kürzel "psvm" machen, steht für "public static void main" und dann die Tabulator-Taste drücken und wir sparen uns wieder eine Menge Tipparbeit. Nun legen wir einmal ein Cabrio-Objekt an. Strg-Leertaste. Da sich die Klasse "Cabrio" ja in einem anderen Paket befindet, nämlich hier im Unterpaket "Fahrzeuge", muss sie importiert werden, damit ich sie verwenden kann. Das macht die IDE automatisch. Ich deklariere mir eine Referenzvariable vom Typ "Cabrio", und die nenne ich "C". und dann erzeuge ich eine neues Cabrio-Objekt, wieder Strg-Leertaste hilft, und ich gebe dem Objekt den Namen "Knut". Und ein Semikolon. Wir erzeugen also hier auf der rechten Seite ein Objekt vom Typ "Cabrio" und auf der linken Seite haben wir eine Referenzvariable deklariert, ebenfalls vom Typ "Cabrio". So weit ist es erst einmal noch nichts Besonderes. Jetzt schauen wir noch einmal in die Klasse "Cabrio" hinein und wir sehen hier oben: "Cabrio" ist eine Unterklasse von "Auto". Der Typ "Cabrio" ist also eine Erweiterung des Typs "Auto". Ein Cabrio ist also auch ein Auto. Das hat zur Folge, dass die Referenzvariable, hier auf der linken Seite, auch vom Typ "Auto" sein darf. Ich ändere das mal, ich mache jetzt aus "Cabrio" "C"-- mache ich "Auto" "A". Jetzt bekomme ich natürlich noch einen Fehler, weil "Auto" noch nicht importiert wurde. Also klicke ich hier links darauf und sage "@importAuto". Das Cabrio-Objekt hat also zwei Typen: es ist einmal vom Typ "Cabrio" und es ist vom Typ "Auto". Wir hatten ja gerade gesagt, mit der Klassendeklaration deklarieren wir einen neuen Typ, und in der Klasse beschreiben wir, welche Methoden zu diesem Typ dazugehören. Die Klasse "Auto" hat einige Methoden, und die Klasse "Cabrio" erbt alle diese Methoden und hat zusätzlich noch ein paar weitere cabrio-typische, "schließe Dach" und "öffne Dach". Nun haben wir in unserer Anweisung hier zwei Typen, auf der rechten Seite, für die Objekterzeugung, haben wir den Typ "Cabrio" verwendet, d. h. wir haben ein Cabrio-Objekt erzeugt, das alle Methoden hat, die sowohl im "Auto" als auch die im "Cabrio" beschrieben sind. Auf der linken Seite, für die Referenzvariable, verwenden wir aber den Typ "Auto" und beim Typ "Auto" stehen uns ja weniger Methoden zur Verfügung, nämlich nur die, die in "Auto" beschrieben sind, nicht aber die, die in "Cabrio" beschrieben sind. Auch wenn das Cabrio die Methoden "öffne Dach" und "schließe Dach" hat, "Auto" hat sie nicht. Ich kann also von dieser Referenzvariablen "A" diese beiden Methoden nicht aufrufen. Wenn ich es trotzdem versuche, also "A,", ich sehe, in der Liste steht kein "öffne Dach" oder "schließe Dach" drin, und wenn ich es manuell eintippe "öffne Dach", dann bekomme ich einen Compiler-Fehler. Und der heißt ganz einfach "Cannot find symbol", "Kann die Methode nicht finden". Fassen wir bis hierhin mal kurz zusammen. Also die Klasse, die ich für die Objekterzeugung verwende, entscheidet darüber, welche Methoden das Objekt tatsächlich hat. Der Typ, den ich auf der linken Seite für die Referenzvariable verwende, entscheidet darüber, welche Methoden ich in diesem Moment über diese Variable tatsächlich aufrufen kann. Um auf cabrio-typische Methoden zugreifen zu können, brauche ich also eine Referenzvariable vom Typ "Cabrio". Lege ich mir die einfach mal an so wohlgemerkt das ist nur eine Referenzvariable, ich erzeuge kein neues Objekt und jetzt weise ich dieser Variablen das zu, was momentan in "A" steht. Damit verweisen also sowohl "A" als auch "C" jetzt auf dasselbe Objekt, nämlich auf meinen Cabrio "Knut". Offensichtlich ist der Compiler aber nicht so richtig glücklich mit dieser Zuweisung, denn er sagt mir "inkompatible Typen". Das hat auch einen einfachen Grund: Es ist zwar jedes Cabrio auch ein Auto, aber nicht jedes Auto ist ein Cabrio. Der Compiler überprüft hier in dieser Zeile nur die Typen dieser beiden Variablen und der Typ von "A" ist halt nun mal "Auto" und der Compiler schaut nicht nach, auf was für ein Objekt diese Variable möglicherweise verweisen könnte. Nun wissen wir aber, dass diese Variable "A" auf ein Cabrio-Objekt verweist, denn wir haben es hier oben ja selbst so festgelegt. Das möchten wir dem Compiler gerne mitteilen. Dafür müssen wir eine Typumwandlung einführen, nämlich hier, vor der Variablen, den Zieltyp davor schreiben. Wir führen hier lediglich eine Typumwandlung von einer Referenzvariablen auf eine andere durch. Das Objekt bleibt ein Cabrio, es war davor bereits eins und es ist jetzt immer noch eins. Aber immerhin haben wir jetzt eine passende Referenzvariable und über diese können wir auch tatsächlich unsere "öffne Dach"-Methode aufrufen und es gibt keine Beschwerden des Compilers mehr. Eine solche explizite Typumwandlung, auf Englisch "Type cast", ist aber durchaus gefährlich, weil wir nämlich die Typprüfung des Compilers außer Kraft setzen. Um das zu demonstrieren, nehmen wir hier oben jetzt eine weitere kleine Änderung vor, und zwar mache ich hier aus dem Konstruktornamen "Cabrio" jetzt "Auto", d. h. ich erzeuge gar kein Cabrio-Objekt mehr, sondern ich erzeuge ein normales Auto-Objekt, also nur ein Exemplar der Basisklasse. "A" verweist also jetzt auf ein Auto und hier bei der Zuweisung habe ich ja die Typprüfung des Compilers außer Kraft gesetzt. Der Compiler kann mich also nicht warnen. Ich habe ihm gesagt "Compiler, hör zu, ich weiß was ich tue!", d. h. zur Entwicklungszeit des Programmes scheint alles in Ordnung zu sein. Wenn ich jetzt aber versuche, dieses Programm auszuführen, mal rechte Maustaste, hier hinein klicken "Run File", dann sehe ich hier unten eine lustige rote Meldung, die heißt im Wesentlichen hier "Class cast exception, Auto cannot be cast to Cabrio". Das heißt, das Auto-Objekt wehrt sich, wenn man versucht, es als Cabrio zu betrachten. Sie sehen also, wenn wir es brauchen, dann haben wir die Möglichkeit, solche Typumwandlungen einzubauen, aber wir müssen immer darauf achten, dass wir nicht einen Fehler ins Programm einbauen.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!