for each循环的一个奇怪现象!
看下面这段代码:
class Employee{
}
class Manager extends Employee{
}
public class InheritanceTest {
public static void main(String[] args) {
Manager[] ms = new Manager[10];
Employee[] es = ms;
for(int i = 0 ; i < es.length; ++i)
es[i] = new Employee();
}
}
这样可以编译,但是在运行时会有一个ArrayStoreException异常。
但是如果将代码改为
class Employee{
}
class Manager extends Employee{
}
public class InheritanceTest {
public static void main(String[] args) {
Manager[] ms = new Manager[10];
Employee[] es = ms;
for(Employee elem:ms)
elem = new Employee();
}
}
可以顺利通过编译运行,一点异常都没有。
请问这两种写法有什么不同吗,为什么结论不一样?