如Employee和Student都继承自Person,考虑下面两条赋值语句:
Person arr=new Employee[5]; //Employee和Person是兼容的
arr[0]=new Student(……); //Student和Person也是兼容的
两句都编译,而arr[0]实际上是引用一个Employee,可是Student和Employee是不兼容的,这样就产生了类型混乱。运行时系统不能抛出ClassCastException异常,因为不存在类型转换。
避免这种问题的最容易的方法就是指定这些数组不是类型兼容的。可是,在Java中数组是类型兼容的。这叫做协变数组类型。每个数组都明确了它所允许存储的对象的类型。如果将一个不兼容的类型插入到数组中,那么虚拟机就将抛出一个ArrayStoreException异常。
注: 本文基于《数据结构与算法(Java语言描述)》一书,仅作学习交流。