Javaマルチステートでのタイプ変換(instanceof)


リファレンスタイプ変換1、アップタイプ変換(自動/暗黙タイプ変換)は、小さなタイプが大きなタイプに変換され、リスクは認められません.つまり、サブタイプオブジェクトも親タイプです.2、下向きタイプ変換(強制タイプ変換)、大タイプ変換は小タイプに、一定の風向がある.マルチステートインスタンスの場合、上のタイプに変換できますが、変換後、サブタイプオブジェクト間の相互変換には一定のリスクがあります.
リスクを回避するにはどうすればいいですか?instanceof演算子を使用して、参照オブジェクトのタイプを解決し、タイプ変換のセキュリティ問題を回避します.
Dog dog = new Dog();
//       (      ),     
Animal animal = dog;
//      animal  Dog    ,       Cat  ,        ,       
Cat cat = (Cat)animal;// 1.     Cat    2.   Dog         。    

リスクを回避し、プログラムのセキュリティを向上
 //      
Dog dog = new Dog();
//       (      ),     
Animal animal = dog;
//       (      )         
if(animal instanceof Dog)
{
   Dog  dog2 = (Dog)animal; 
   System.out.println("      ");
}else
{
   System.out.println("        "+animal.getClass());
}


//     (instanceof   )
if(animal instanceof Cat)
{
		Cat cat  = (Cat)animal;
		System.out.println("      ");
}else
{
	System.out.println("      "+animal.getClass());
	//           throw new  classCastException();
}

まとめ:1>instanceofの役割は、左側の対修が右側のクラスのインスタンスであるかどうかをテストすることです.2>Javaプログラムを記述する場合、参照変数はコンパイル時のタイプのメソッドのみを呼び出すことができ、実際に参照したオブジェクトにこのメソッドが含まれていても、実行時のタイプのメソッドを呼び出すことはできません.この参照変数を実行時タイプを呼び出す方法が必要な場合は、強制タイプ変換を使用して実行時タイプに変換する必要があります.しかし、強制変換の過程でタイプ強制変換異常(ClassCastException)が発生する可能性があり、彼を回避する方法も簡単で、instanceofキーワードを利用して本クラスの対象かどうかを判断し、成立すれば強制タイプ変換を行う.instanceofはoc言語のisMemberOfClassに相当する
demoトランスファゲート