Java はこれをサポートしていません。ポリモーフィズムを利用して as のインスタンスとB
asのインスタンスを処理できますA
が、その逆はできません。
これを行うことができない理由は、A
のインスタンスが実際にのインスタンスであることを保証するタイプ セーフな方法がないためですB
(インスタンスをキャストすることはできますが、実行時に例外を保証するだけです)。 .
タイプ セーフでポリモーフィックな関係がタイプ間に存在するかどうかを確認する最善の方法は、このステートメントの有効性をテストすることです。
あるタイプのインスタンスは、他のタイプのインスタンスです。
例えば:
Dog のインスタンスはすべて Mammal のインスタンスです。
Mammal のインスタンスはすべて Dog のインスタンスです。
最初の例は真ですが、2 番目の例は偽であることに注意してください。あなたのコード例でやろうとしていることは、哺乳類を犬として扱おうとするのとまったく同じです.たとえそれが時々真実かもしれませんが、それはコンパイラがそれを許可しないことを意味します.
繰り返しになりますが、真である可能性がある場合は、参照をキャストする必要がありますが、これにより、実行時に例外が発生する可能性があります。上記の具体的な例は、 type のインスタンスをインスタンス化したことが明確にわかるため、例外が発生する場合の 1 つですA
。