Typumwandlungen bei Referenztypen



Ähnliche Dokumente
Objektorientierte Programmierung. Kapitel 12: Interfaces

Prinzipien Objektorientierter Programmierung

Gebundene Typparameter

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Objektorientierte Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die Programmierung

Java Einführung Abstrakte Klassen und Interfaces

Kapitel 6. Vererbung

Java: Vererbung. Teil 3: super()

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Kapitel 6. Vererbung

Vererbung & Schnittstellen in C#

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Javakurs zu Informatik I. Henning Heitkötter

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

4. Vererbung Die Klasse Object. Die Klasse Object

Kapitel 6. Vererbung

Algorithmen und Datenstrukturen

13. Tutorium zu Programmieren

Innere Klassen in Java

Programmieren in Java

5. Abstrakte Klassen

Einführung in die Programmierung für Wirtschaftsinformatik

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Zählen von Objekten einer bestimmten Klasse

Factory Method (Virtual Constructor)

Große Übung Praktische Informatik 1

Einführung in die Java- Programmierung

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

C/C++-Programmierung

Der lokale und verteilte Fall

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Objektorientierte Programmierung

Assoziation und Aggregation

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

3 Objektorientierte Konzepte in Java

EndTermTest PROGALGO WS1516 A

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Erfahrungen mit Hartz IV- Empfängern

Remote Method Invocation

Client-Server-Beziehungen

ObjectBridge Java Edition

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

WPF Steuerelemente Listbox, ComboBox, ListView,

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Software Engineering Klassendiagramme Einführung

Kapitel 12: Übersetzung objektorienter Konzepte

BEISPIELKLAUSUR Softwareentwicklung:

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Programmierkurs Java

1 Polymorphie (Vielgestaltigkeit)

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Java Kurs für Anfänger Einheit 5 Methoden

Rundung und Casting von Zahlen

C# im Vergleich zu Java

Grundlagen von Python

Software Engineering Klassendiagramme Assoziationen

Abschnitt 9: Schnittstellen: Interfaces

Studentische Lösung zum Übungsblatt Nr. 7

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

SEP 114. Design by Contract

Wärmebildkamera. Arbeitszeit: 15 Minuten

Einführung in die Programmierung für NF

WebService in Java SE und EE

Einführung in die Java- Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Auktionen erstellen und verwalten mit dem GV Büro System und der Justiz Auktion

Selbststudium OOP4 Auftrag

e-books aus der EBL-Datenbank

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Klassenbeziehungen & Vererbung

Grundkonstrukte der Objektorientierung in Java, C# und C++

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Abschnitt 12: Strukturierung von Java-Programmen: Packages

U08 Entwurfsmuster (II)

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Nathan Burgener. Design by Contract. Modul SWE

Integrierter -versand Konfiguration/Beschreibung

Einführung in die Programmierung Blockkurs Java

Testen mit JUnit. Motivation

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

Themen. Web Service - Clients. Kommunikation zw. Web Services

Einführung in die Programmierung

Übungen zu Softwaretechnik

Bevor lineare Gleichungen gelöst werden, ein paar wichtige Begriffe, die im Zusammenhang von linearen Gleichungen oft auftauchen.

Transkript:

Typumwandlungen bei Referenztypen Genau wie es bei einfachen Typen Typumwandlungen gibt, gibt es auch bei Referenztypen Umwandlungen von einem Referenztypen in einen anderen Referenztypen, die wie bei den einfachen Typen entweder implizit oder explizit (cast) stattfinden können. Nicht alle Umwandlungen sind erlaubt (und würden Sinn machen). class A class B class C extends B Downcasting Upcasting FH Bonn-Rhein-Sieg Programmiersprache Java 250

Upcasting bei Referenztypen In Java ist es immer erlaubt, ein Objekt einer Unterklasse U in eine Objekt einer Oberklasse O zu verwandeln (Upcast, erweiternde Umwandlung). Dies ist einfach einzusehen, wenn man bedenkt, dass eine Instanz von U alle Komponenten und Methoden von O enthält (eventuell jedoch überschrieben). Ein Upcast kann sogar implizit stattfinden. Überall, wo ein Objekt einer Klasse verlangt ist, kann auch ein Objekt einer Unterklasse stehen. Beispiel: class Oberklasse { static void methode(oberklasse o) {... // erwartet Typ Oberklasse class Unterklasse extends Oberklasse { class Test { Unterklasse u = new Unterklasse(); Oberklasse.methode(u); // übergeben wird u mit Typ Unterklasse // implizite Umwandlung nach Typ Oberklasse Oberklasse o = u; // ebenfalls implizite Umwandlung FH Bonn-Rhein-Sieg Programmiersprache Java 251

Upcasting bei Referenztypen Von Klassentyp S nach Klassentyp T, wenn S Unterklasse von T ist. Von Klassentyp S nach Schnittstellentyp K, wenn S K implementiert. Von Nulltyp in jeden Klassen-, Schnittstellen- oder Feldtypen. Von Schnittstellentyp J in Schnittstellentyp K, wenn J eine Unterschnittstelle von K ist. Von Schnittstellentyp oder Feldtyp zu Object Von Feldtyp zu Cloneable (später) Von Feldtyp SC[ ] nach Feldtyp TC [ ], wenn SC und TC Referenztypen sind und es einen Upcast von SC nach TC gibt. Upcasting von Referenztypen ist immer möglich. Das resultierende Objekt verhält sich wie ein Objekt der Oberklasse. FH Bonn-Rhein-Sieg Programmiersprache Java 252

Beispiele class OKlasse { int x = 31415; class UKlasse extends OKlasse { int x = 4711; class Test { UKlasse unter = new UKlasse(); OKlasse ober = unter; unter = null; // alle Umwandlungen implizit // Unter- nach Oberklasse // Nulltyp in jeden Referenztypen UKlasse[] feld_u = new UKlasse[10]; OKlasse[] feld_o = feld_u; // Feld nach kompatibles Feld FH Bonn-Rhein-Sieg Programmiersprache Java 253

Beispiel class KFZ { int ladevermoegen = 0; public String bezeichnung() { return "KFZ"; public String tostring() {return bezeichnung() + ", Laden=" + ladevermoegen; class LKW extends KFZ { int ladevermoegen = 36000; public String bezeichnung() { return "LKW"; class Kipper extends LKW { int ladevermoegen = 16000; public String bezeichnung() { return "Kipper"; public class Test { Kipper kipper = new Kipper(); System.out.println(kipper.toString()); // Kipper, Laden=0 System.out.println(kipper.ladevermoegen); // Upcast, 16000 System.out.println(((LKW)kipper).ladevermoegen); // Upcast, 36000 System.out.println(((KFZ)kipper).ladevermoegen); // Upcast, 0 FH Bonn-Rhein-Sieg Programmiersprache Java 254

Downcasting bei Referenztypen Bei Downcasts (einengende Umwandlungen) von einem Typ O zu einem Typ U ist es komplizierter. Hier muss zur Laufzeit festgestellt werden, ob der Wert eine Instanz vom gewünschten Typ U ist und nur zur Zeit der Teil "sichtbar" ist, der zu O gehört. Ist dies nicht der Fall, ist die Umwandlung nicht erlaubt. class B class C extends B Downcasting? class O {... class U1 extends O {... class U2 extends O {... class Test { O o = new U1(); // Downcast U1 u1 = (U1) o; // Upcast kein Problem U2 u2 = (U2) o; // Upcast erzeugt zur Laufzeit(!) Fehler FH Bonn-Rhein-Sieg Programmiersprache Java 255

Downcasting bei Referenztypen Von Klassentyp S nach Klassentyp T, wenn S Oberklasse von T ist. Von Klassentyp S nach Schnittstellentyp K, wenn S nicht final und K nicht implementiert. VonObject in einen Feldtypen oder Schnittstellentypen. Von Schnittstellentyp J in Klassentyp T, wenn T nicht final ist. Von Schnittstellentyp J in finalen Klassentyp K, wenn T J implementiert. Von Schnittstellentyp J in Schnittstellentyp K, falls J keine Unterschnittstelle von K ist und es keine Methode in beiden gibt mit gleicher Signatur aber unterschiedlichem Rückgabetyp. Von Feldtyp SC[ ] nach Feldtyp TC [ ], wenn SC und TC Referenztypen sind und es einen Downcast von SC nach TC gibt. Downcasting von Referenztypen ist nur mit einer expliziter cast-operation möglich und muss zur Laufzeit auf Korrektheit überprüft werden (löst im Fehlerfall eine ClassCastException aus). FH Bonn-Rhein-Sieg Programmiersprache Java 256

Beispiel class KFZ { int ladevermoegen = 0; public String bezeichnung() { return "KFZ"; public String tostring() {return bezeichnung() + ", Laden=" + ladevermoegen; class LKW extends KFZ { int ladevermoegen = 36000; public String bezeichnung() { return "LKW"; class Kipper extends LKW { int ladevermoegen = 16000; public String bezeichnung() { return "Kipper"; public class Test { KFZ kfz = new Kipper(); // Upcast System.out.println(kfz.toString()); // Kipper, Laden=0 System.out.println(kfz.ladevermoegen); // Downcast, 0 System.out.println(((LKW)kfz).ladevermoegen); // Downcast, 36000 System.out.println(((Kipper)kfz).ladevermoegen); // Downcast, 16000 FH Bonn-Rhein-Sieg Programmiersprache Java 257

Übersicht Cast-Operationen bei Referenztypen class A {... class B extends A {... class C extends B {... Zulässige implizite Upcasts: B b = new B(); A a = b; C c = new C(); B b = c; A a = c; Zulässige explizite Downcasts: A a = new B(); B b = (B) a; A a = new C(); B b = (B) a; C c = (C) a; Implite Upcasts implizieren auch die Möglichkeit für explizite Upcasts. (explizit = nur mit expliziter cast-operation möglich) FH Bonn-Rhein-Sieg Programmiersprache Java 258