1 数组可以协变:
如果 B extends A,则 A[] 也是 B[] 的超类,则B类型的数组可以赋值给A
B[] b=new B[5];
A[] a=b;
如果 B extends A, C extends A 下面的代码会抛出异常 ArrayStoreException
A[] a=new B[5];
a[0]=new C(); // 可以编译 但是运行异常
2 泛型 不能协变
如果 B extends A 则下面的代码会报错
ArrayList<A> a=new ArrayList<B>();
如果要解决这种问题 则可以使用通配符的方法
ArrayList<? extends A> a=new ArrayList<B>();