代码如下,在进行Sub s=(Sub)b时报出类型转化错误,请高手给说明一下类型转化的原理,多谢了。class Base{}
class Sub extends Base{}
class Sub2 extends Base{}public class MyClass
{
     public static void main(String[] args)
    {
         Base b=new Sub();
         Sub s=(Sub) b; //
         
    }
}

解决方案 »

  1.   

    看错了- -SORRY,你的代码是对的汗
      

  2.   

    代码编译是没错的,但运行时会报错。
    Exception in thread "main" java.lang.ClassCastException: com.example.Base cannot be cast to com.example.Sub
    at com.example.scjp.MyClass.main(MyClass.java:13)
      

  3.   

     LZ的代码很正常啊
      子类可以强转父类的
       就像 Object o 可以被强转成 (String) o
      

  4.   

    不好意思,贴错了,代码里应该是这样的,class Base{}
    class Sub extends Base{}
    class Sub2 extends Base{}public class MyClass
    {
         public static void main(String[] args)
        {
             Base b=new Base();  //这里改了
             Sub s=(Sub) b; //
             
        }
    }请高手再帮忙看看。
      

  5.   


    转换不是这样一个原则吗:
    1,向上转是不需要强制转换的
    Sub b=new Sub();
    Base s= b;
    2,向下转就需要强制转换了
    Base b=new Base(); 
    Sub s=(Sub) b; 如一楼所说,四边形向正方形转就需要强制转换才对啊
      

  6.   

    哦 明白了,只有当这个实例已经存在的时候才能转换,
    就像下面这样;
    Base[] bb=new Base[2];
    bb[0]=new Sub();
    bb[1]=new Sub2();
    Sub ss=(Sub)bb[0];好的 谢谢各位高手们了,散分,分不多 一点意思。
      

  7.   

    请无视我的"将扩展类强转成基类是会报错的"
    因为这个观点是错的,实在不好意思,应该是将基类的对象赋值给扩展类的引用是错的。。
    Base b = new Base();
    Sub s = b; // error
    Sub s = (Sub)b; // error 因为这里的b只有扩展类的信息。。而却希望得到更多的即扩展类的信息是错误的