我们以前说过,将一个类型强制转换成另外一个类型的过程被称为类型转换。Java程序设计语言提供了一种专门用于进行类型转换的表示法。例如:
double X = 3.405;
int nx = (int) x;
将表达式x的值转换成整数类型,舍弃了小数部分。
正像有时候需要将浮点型数值转换成整型数值一样,有时候也可能需要将某个类的对象引用转换成另外一个类的对象引用。对象引用的转换语法与数值表达式的类型转换类似,仅需要用一对圆括号将目标类名括起来,并放置在需要转换的对象引用之前就可以了。例如:
Manager boss = (Manager) staff[0];
进行类型转换的唯一原因是:在暂时忽视对象的实际类型之后,使用对象的全部功能。
最后,如果这个类型转换不可能成功,编译器就不会进行这个转换。例如,下面这个类型转换:
String C = (String) staff[1];
将会产生编译错误,这是因为String 不是Employee的子类。综上所述:
(1)只能在继承层次内进行类型转换。
(2)在将超类转换成子类之前,应该使用instanceof进行检查。
总的来说,强势类型转换可以使用,但容易出现编译错误。