我知道可以将一个子类的引用赋给你个超类变量,那么讲一个超类的引用赋给你个子类变量的进行类型转换,假如有一个类是Employee类 他的子类是Manager,而staff[1]是Employee的对象变量,那么Manager boss=(Manager)staff[1]这样子可以吗?

解决方案 »

  1.   

    编译都无法通过的,除非staff[1]这东西本来就指向的是子类,然后你再次向上转型让它指向了父类,这样的话就可以用你的那句话Manager boss=(Manager)staff[1]再次向下强转为子类。
      

  2.   

    这个要具体情况具体分析
    如果你的staff[1]指向的是一个Manager的引用,那么是可以的
    如果你的staff[1]指向的是一个Employee的引用,那么是不可以的
    用代码简单说明
    Employee[] staff = new Employee[2];
    staff[0] = new Employee(); //这个是不能强行转为Manager的,因为staff[0]指向的是Employee引用
    staff[1] = new Manager(); //这个是可以转为Manager的,因为staff[1]指向的是Manager引用
    如果你不知道staff[1]指向的是什么引用,可以加个if判断

    if (staff[1] instance of Manager) {
        Manager boss=(Manager)staff[1]
    }