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);
                                               ^

解决方案 »

  1.   

    b1.i 这个是一个int 值 怎么能转成 SubClass?
      

  2.   

    应该这样转吧,  你那样是把i转成SubClass了!
    应该((SubClass)b).i
      

  3.   

    这是优先级的运算问题,改成下面的就好了 System.out.println(((SubClass)b1).i); 
    原来的运算顺序是先执行b1.i,然后返回int值再执行强制类型转换,所以会出错
      

  4.   

    http://blog.csdn.net/jiafu1115/article/details/6662148
    版本,你搞错了优先级:
    优先级
     运算符 
      结合顺序
     
    1
      []数组运算 .点运算符 ()调用方法
     从左到右
     
     2
       ! ~ ++ -- +(一元加) -(一元减) ()强制类型转换 new
      从右到左
     
    所以你.是先运行的,然后才转化,所以出错了,这个我也经常忘记。所以多用()就清晰了