强制转换时,一定要转换为"它所存储的子类对象",否则会在运行时抛出:ClassCastException
为了防止这种异常,我们可以在"强制转换前"先进行判断,后转换:
判断,使用关键字:instanceof(只能用于引用数据类型的判断)
格式:变量 instanceof 某类类型
返回:boolean值;如果为true:表示左边的"变量"是右边的"某类类型",可以安全强制转换
如果为flase:表示左边的"变量"不是右边的"某类类型";
- 【向下转型的注意事项】
- Animal a = new Dog();
- //Cat c = (Cat)a;向下转型因为不明确具体子类对象类型,所以容易引发ClassCastException异常。
- 所以为了避免这个问题,需要在向下转型前,做类型的判断。
- 判断类型用的是关键字 instanceof
- if(a instanceof Cat)//a指向的对象的类型是Cat类型。
- {
- //将a转型Cat类型。
- Cat c = (Cat)a;
- c.catchMouse();
- }
- else if(a instanceof Dog)
- {
- Dog d = (Dog)a;
- d.lookHome();
- }
复制代码 |