Zuweisungs- Kompatibilität |
Wann ist eine Zuweisung zulässig?
|
|
Klassen, Interfaces und Arrays repräsentieren Typen
|
|
T1 a; ... T2 b; ... a = b;
|
| |
|
Die folgenden Regeln gelten in gleicher Weise
für Parameterübergaben.
|
| |
|
... f(T1 a); ... T2 b; ... x.f(b) ...
|
| |
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 = b; a = c; b = c;
Object d;
d = a; d = b; d = c;
|
| |
a ist vom Typ Object |
und b ist vom Typ Feld.
|
|
|
| |
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;
|
| |
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;
|
| |
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;
|
| |
|
T1 und T2 sind Verweistypen und T2 kann an T1 zugewiesen
werden
|
|
Object [] a;
Integer [] b;
a = b;
|
| |
|
Vorsicht: Diese Konversion kann zu Laufzeitfehlern führen!
|
|
Object [] a;
Integer [] b = new Integer[20];
a = b;
a[0] = new Double(3.141);
|
| |
|
|