class A{
int a = 1;
public int getA(){
return a;
}
}

class B extends A{
int a = 2;
public int getA(){
return a;
}
}


public   class li{
public static  void main ( String [] args) {
B a11 = (B)new A();
}
}
编译没有问题,运行时为什么会有异常呢?
Exception in thread "main" java.lang.ClassCastException:怎么修正才行?

解决方案 »

  1.   

     A a11 = (A)new B();
      

  2.   

    只能由小往大转,不能由大往小转
    你这样,把父类A看成double型
    把子类B看成 int型把int转成double当然可以了,前面补0就可以了。
    但把double转成int就不行啊
      

  3.   

     B a11 = new A();
      

  4.   

    是这样:class A{
            int a = 1;
            public int getA(){
                return a;
            }
        }
        
    class B extends A{
            int a = 2;
            public int getA(){
                return a;
            }
    }
        
        
    public   class li{
        public static  void main ( String [] args) {
            A a11 = new B();
        }
    }
      

  5.   

    楼上的杂想的啊
    父类不能转子类才差不多;不要误导楼主
    因为父类对象在创建的时候分配的空间是父类的,而子类可能需要的更多(比如子类多几个属性);
    这样在把父类转子类的时候,因为父类没有足够的空间,故报错;
    谁说有子类转父类的时候报错的啊
    class A{}
    class B extends A{}
    A b = new B();
    这都不用转,自动向上转型的;子类多的空间父类引用不出来这叫擦除。
    B b1 = (B)b;  //这又叫恢复;
    注意 只有对象是子类,引用是父类的时候,因为需要引用某些子类的属性的时候,才会把这个转成子类的,
    外表看起来是 父类转子类,其实只是把引用转回来,如果对象是父类的话是不可能转成子类的
      

  6.   


    //向下转型有误
    class A{
            int a = 1;
            public int getA(){
                return a;
            }
        }
        
    class B extends A{
            int a = 2;
            public int getA(){
                return a;
            }
    }
        
        
    public   class li{
        public static  void main ( String [] args) {
            A a11=new B();        
        }
    }
      

  7.   

    应该是 A a11=new B(); 
      

  8.   


    code=Java]public static  void main ( String [] args) {
         A a = new B();
            B a11 =(B) a;
        }[/code]
    这样转型才不会出问题!
      

  9.   

    public static  void main ( String [] args) {
         A a = new B();
            B a11 =(B) a;
        }
    这样转型才不会出问题,a的引用类型转成实际类型不会有问题。
      

  10.   

    可以把父类转型为子类,但这里指的不是对象(实例),而是声明的变量。举例来说:lz的代码出错的地方是
    B a11 = (B)new A();
    说的更具体点,错误在转型父类对象到子类的代码
    (B)new A()
    B类继承A类,所以B类实例可以被归属为A类实例,但是A类实例不可以被归属为B类实例。
    也就是说A a11=new B()是正确的,B a11 = (B)new A()会有转型错误。不过我想lz的意思并不是A a11=new B(),lz想做的应该是
    A a2 = new B();
    B a11 = (B)a2
    这是在多态中比较常见的用法,a2虽然是A类的变量,不过a2实际引用的可能是A类或是任何A类的子类的对象。但是编译器只通过变量声明来判断类型,所以上述代码需要通过(B)告知编译器a2引用的对象其实是B类。但如果在运行时实际对象并不属于B类,就会抛出ClassCastException。再回到lz的代码(B)new A(),因为在运行时实际拥有的是A类的对象,而A类的对象并不属于B类,所以抛出ClassCastException不知道用没有解释清楚,见笑了