一个运行时类型为父类的数组,如果其存放的都是子类的元素,也不能够将其转换为子类的数组。例如:
Object[] os = new Object[]{"hello", "world"};
String[] ss =(String[])os;
其实这和普通的向下强转没什么不同,例如一个父类引用的运行时类型就是父类,当然不能向下强转为子类,之所以我们认为其能强转,是被数组中存放的元素的类型迷惑了,其实跟容器中的元素类型没关系。
所以当os的运行时类型如果就是String[]的时候,自然就能强转了。
Object[] os = new String[]{"ss", "ss"};
String[] ss = (String[])os;
总结:数组的类型转换和其他类型没有什么不同,可以认为Object[] 是String[]的父类型,但是转换的关键是要看运行时类型,千万不要被数组中存放的元素给迷惑了,他们不起作用。