java 协变数组类型
主要表现编译期没错,运行期间抛出java.lang.ArrayStoreException
代码实例:
父类
public class Persion {
private String name;
private Integer age;
public Persion(String name,Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Persion [name=" + name + ", age=" + age + "]";
}
}
子类 Emp
public class Emp extends Persion{
public Emp(String name, Integer age) {
super(name, age);
}
}
子类 Status
public class Status extends Persion{
private String address;
public Status(String name, Integer age) {
super(name, age);
this.address = "武当山上";
}
@Override
public String toString() {
return super.toString() + "Status [address=" + address + "]";
}
}
测试
Persion[] p = new Status[3];
p[0] = new Persion("zhangsan",30);
p[1] = new Status("李四",40);
p[2] = new Emp("王五",50);
System.out.println(p[0]);
System.out.println(p[1]);
System.out.println(p[2]);
结果
java.lang.ArrayStoreException: Persion
再次测试
Persion[] p = new Status[3];
//p[0] = new Persion("zhangsan",30);
p[1] = new Status("李四",40);
// p[2] = new Emp("王五",50);
//System.out.println(p[0]);
System.out.println(p[1]);
// System.out.println(p[2]);
结果
Persion [name=李四, age=40]Status [address=武当山上]