Manager是Employee的子类
程序部分代码:
Manager boss=new Manager("qiuqiang",80000,1987,12,15);
boss.setBonus(5000);
Employee[] staff=new Employee[3];
staff[0]=boss;
staff[1]=new Employee("yanglaji",50000,1989,10,1);
staff[2]=new Employee("madashuai",40000,1990,3,15);
//第一句
Manager boss2=(Manager)staff[0];
//第二句
Manager boss3=(Manager)staff[1];
为什么第一句是正确的,而第二句抛出classcastException异常?
我对这句话理解很模糊:
 [将一个超类的引用赋给一个子类变量,必须进行类型转换]
我上面的程序Manager boss3=(Manager)staff[1];怎么就出错呢?

解决方案 »

  1.   

    boss是一个子类实例,所以(Manager)造型是没错的staff[1]是一个父类实例, 向下造型时会异常
      

  2.   

    for instance:Animal是父类Dog是子类
    Cat是子类Animal dog = (Animal) new Dog(); // 狗是动物  ,正确Animal animal = new Cat() ; //
    Dog dog = (Dog) animal ; //实际上animal是Cat, 却强制转化成Dog, 错误
      

  3.   

    向下转换的时候可以用instanceof运算符判断是否能够转换:
    if( a instanceof B )  c = (B)a;