ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常 这句话怎么理解啊 不是实例  的子类时 or 不是 实例的子类时

解决方案 »

  1.   

    我也出现类似问题 求教!!!class A{
    public void print() {
    System.out.println ("A") ;

    }

    }class B extends A {
    public void print() {
    System.out.println ("B") ;
    }

    }
    public class Test_P {

    public static void main(String args[]){
        A a = new B() ;
        a.print();


        B b1 = (B) a ;//cast 
        b1.print() ;

        B b2 =(B)new A() ;
        b2.print() ;

    }

    }我有一点不明白的是 : 既然 B b1 = (B) a ;//子类的对象可以指向父类的对象
    为何我写成 B b2 =(B)new A() ;这样就说有转换错误
      

  2.   

    B b2 =(B)new A()
    你这个是把一个父类对象转换成一个子类对象啊,肯定会有问题
    你想想,如果汽车是父类,轿车是子类,那这句话的意思就是把普通的汽车变成一个轿车,行得通吗?
      

  3.   

    B b1 = (B) a之所以能转换,是因为这时的a是B类的对象,而不是A类的对象,只是A类的引用来引用了他。
    其实不管他怎样向上向下转型,我们实际的对象类型始终是最初实例化(new)的那个,我们实际的对象始终只能向上转型。
    这样我们就可以看一下B b2 =(B)new A();这条语句,他实际的对象是new 的那个即A类型,这时如果把它转为B类型就是向下转型了,违背了我们上面的原则,所以是错误的。也就是我们看事物不要看他的表面(引用类型),而要看他的实质(实际对象类型)。