public class TestCasting {
public static void main(String[] args){
//BaseClass b = new BaseClass();
BaseClass b1 = new SubClass();
System.out.println((SubClass)b1.i); }
}class BaseClass {
int i=1;
}class SubClass extends BaseClass {
int i=2;
}
--------------------------
编译时出现以下提示,为什么?
TestCasting.java:7: 不可转换的类型
找到: int
需要: SubClass
System.out.println((SubClass)b1.i);
^
public static void main(String[] args){
//BaseClass b = new BaseClass();
BaseClass b1 = new SubClass();
System.out.println((SubClass)b1.i); }
}class BaseClass {
int i=1;
}class SubClass extends BaseClass {
int i=2;
}
--------------------------
编译时出现以下提示,为什么?
TestCasting.java:7: 不可转换的类型
找到: int
需要: SubClass
System.out.println((SubClass)b1.i);
^
应该((SubClass)b).i
原来的运算顺序是先执行b1.i,然后返回int值再执行强制类型转换,所以会出错
版本,你搞错了优先级:
优先级
运算符
结合顺序
1
[]数组运算 .点运算符 ()调用方法
从左到右
2
! ~ ++ -- +(一元加) -(一元减) ()强制类型转换 new
从右到左
所以你.是先运行的,然后才转化,所以出错了,这个我也经常忘记。所以多用()就清晰了