Java强制类型转换

在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。

Object x = new Integer(0);
Number y = (Number)x;   //正确

父类引用x指向子类对象,多态。
x在内存中的本质还是Integer类型,所以可以强转。

Integer x = new Integer(0);
String y = (String)x;   //编译时报错,不兼容的类型
Object x = new Object();
Number y = (Number)x;   //运行时抛出ClassCastException异常

编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。

你可能感兴趣的:(Java)