“父类和子类不应该出现在同一块存储区域”这个理念对于程序的设计是很重要的,在java中也有相关的语法限制。
比如 Manager extends Employee
//数组
Manger[] managers=new Manager[100];
Employee[] employees=managers;//正常编译
在这里如果试图将一个employee实例对象存储到employees,则会抛出异常(ArrayStoreException),原因是java会记住一开始的数组的类型,这是数组的保护。
同样的情况还出现在java的泛型中,
//集合
ArrayList<Manager> managers =new ArrayList<>();
ArrayList<Employee> employees=managers;//报错
这里再赋值给employees的时候就会报错,原因是集合并没有像数组那样的保护机制。