将一个子类的引用付给一个超类变量,编译器是允许的。

但将一个超类的引用赋给一个子类变量,必须进行类型转换。

Manager boss=new Manager();
Employee staff= new Employee[2];
staff[0]=boss;
staff[1]=new Employee();

Manager b=(Manager)staff[0];//强制类型转换
Manager c=(Manager)staff[1];//错误

因此在进行类型转换之类,先查看一下是否能够成功的转换,这个过程简单的使用instanceof运算就可以实现。

if(staff[1] instanceof Manager){
Manager c=(Manager)staff[1];
}

java的类型转换类似于C++中对进行dynamic_cast