homedukeOOP mit Java: Zuweisungskompatibilität Prof. Dr. Uwe Schmidt FH Wedel

Zuweisungskompatibilität

weiter

weiter

Verweise und Zuweisungen

Zuweisungs-
Kompatibilität
Wann ist eine Zuweisung zulässig?
merke
Klassen, Interfaces und Arrays repräsentieren Typen
 
T1 a; ... T2 b; ... a = b;
weiter
merke
Die folgenden Regeln gelten in gleicher Weise für Parameterübergaben.
weiter
 
... f(T1 a); ... T2 b;  ...  x.f(b) ...
weiter
a besitzt als Typ
eine Klasse
und b besitzt als Typ eine Klasse.
Der Typ von b ist Unterklasse des Typs von a.
 
class X { ... }
class Y extends X { ... }
class Z extends Y { ... }
 
X a;
Y b;
Z c;
 
a = ba = cb = c;
 
Object d;
d = ad = bd = c;
weiter
a ist vom Typ Object
und b ist vom Typ Feld.
 
Object a;
X []   b;
 
a = b;
weiter
a besitzt als Typ
ein Interface
und b besitzt als Typ eine Klasse,
die dieses Interface implementiert.
 
interface I { ... }
 
class X implements I { ... }
 
I a;
X b;
 
a = b;
weiter
a besitzt als Typ
ein Interface
und b besitzt als Typ ein Interface,
das von dem Interface von a abgeleitet ist.
 
interface I { ... }
interface J extends I { ... }
 
I a;
J b;
 
a = b;
weiter
a besitzt als Typ ein Feld
mit Komponententyp T1
und b besitzt als Typ ein Feld mit Komponententyp T2.
 
T1 und T2 sind die gleichen einfachen Datentypen
 
int [] a;
int [] b;
 
a = b;
weiter
 
T1 und T2 sind Verweistypen und T2 kann an T1 zugewiesen werden
 
Object  [] a;
Integer [] b;
 
a = b;
weiter
merke
Vorsicht: Diese Konversion kann zu Laufzeitfehlern führen!
 
Object  [] a;
Integer [] b = new Integer[20];
 
a = b;
 
a[0] = new Double(3.141);
weiter
merke

weiter

Erweiterungen in Java 1.5

Auto-Boxing
implizite Konversion von einfachen Werten in Objekte der zugehörigen Wrapper Klasse
Beispiel
Integer i = 42;
 
// semantisch gleichwertig zu
 
Integer i = new Integer(42);
 
// implementiert durch
 
Integer i = Integer.valueOf(42);
weiter
Auto-Unboxing
implizites Auslesen des Wertes aus einem Objekt einer Wrapper Klasse
Beispiel
Integer i = ...;
 
int j = i;
 
// entspricht
 
int j = i.intValue();
weiter
merke
aus C# übernommen
merke
Diese Transformationen (rewriting) finden beim Übersetzen von Java in JVM Code statt.

weiter

Generics und Typkompatibilität

Typparameter
werden bei der Überprüfung der Kompatibilität mit einbezogen
merke
Es gibt noch eine ganze Menge Kompatibilitätsregeln mehr
--> Generics

Letzte Änderung: 19.05.2014
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel