Java では、強制型変換は基本データ型と参照データ型の 2 種類に分けられます。ここで説明する後者は、参照データ型の強制型変換です。
Java では継承と上位変換により、サブクラスはごく自然に親クラスに変換できますが、親クラスからサブクラスへの変換には強制変換が必要です。サブクラスは親クラスよりも多くの属性と強力な機能を持っているため、親クラスからサブクラスへの変換には強制的な変換が必要です。では、親クラスをサブクラスに変換すれば成功するのでしょうか?実際には、これは当てはまりません。それらの間の強制的な型変換は条件付きです。
型コンストラクターを使用してオブジェクトを構築するとき、オブジェクトの型はすでに決定されており、その本質は変わりません。 Java では、親クラスの型を使用して、継承と上位変換を通じて参照できます。このとき、より強力なオブジェクトを参照するために、より弱い型を使用できます。これは実現可能です。ただし、弱い型を強いオブジェクトに強制する場合、機能しない可能性があります。例を挙げて説明します。たとえば、システム内に父と息子という 2 つのオブジェクトがあります。まず、SON オブジェクトを構築してから、FATHER 型変数を使用してそれを引用しましょう:
Father father = new Son();
ここでは、SON オブジェクト インスタンスが FATHER まで変換されていますが、この SON オブジェクト インスタンスの本質はメモリ内にまだあることに注意してください。 SON タイプのみ SON タイプのみ ただし、一時的に能力が弱くなっていますが、強くなりたい場合はどうすればよいですか。オブジェクト タイプを復元してください。
Son son = (Son)father;
親クラスをサブクラスに強制することが常に成功するとは限らないと前述しましたが、どのような状況で失敗するのでしょうか?
参照型の正体が親クラスそのものの型である場合、強制的な型変換はエラーとなります。例:
Father father = new Father(); Son son = (Son) father;
このシステムは ClassCastException 例外情報をスローします。
したがって、コンパイラはコンパイル中に型間に継承関係があるかどうかのみをチェックし、ある場合はパスし、実行時にその真の型をチェックし、ある場合はパスし、そうでない場合は ClassCastException を返します。投げられるだろう。
したがって、継承では、サブクラスは自動的に親クラスに変換できますが、親クラスがサブクラスに強制される場合、強制変換は参照型の真のアイデンティティがサブクラスである場合にのみ成功し、それ以外の場合は失敗します。
上記は Java 改善章 (10) の内容です-----強制型変換 さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。