型から別の型へのキャストは、キャスト表記が継承ツリーの一部である場合にのみ有効であることに注意してください。
Object x = (String)"X"
「X」は String オブジェクトなので有効です。有効(Object)"X"
でも有効
Object y = (Integer) 1
です。(オブジェクト)1 は有効です。
ただし、あるタイプをまったく別のタイプにキャストすることはできません。
Object x = (Integer)"X"
「X」はタイプではないため、有効ではありませんInteger
。
注意すべきもう1つのことは、これが機能することです。
class A extends B implements IInterface.
class C implements IInterface
A a = new A() ;
B b = (B)a;
IInterface c = (IInterface)a ;
上記はandA a
型のオブジェクトとして有効です。できないことはB
IInterface
C c = (C) a;
a は C 型ではなく、取得した ClassCastException をスローします。
によって参照さaThing
れるオブジェクトは、初期化したオブジェクトになります。
String s = "Hello World"
s は、「Hello World」オブジェクトへのポインタ/参照を保持します。
Person person = new Person();
person は、作成されたオブジェクトへの参照を保持します。