package com.company; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; public class Main { public static void main(String[] args) { List<A> a = Arrays.asList(new A(), new B(), new C()); for (A aa : a) { System.out.println(aa instanceof C); } } } class A { public A() { System.out.println("new A"); } @Override public String toString() { return "I'm A"; } } class B extends A { public B() { System.out.println("new B"); } @Override public String toString() { return "I'm B"; } } class C extends B { public C() { System.out.println("new C"); } @Override public String toString() { return "I'm C"; } }
在1.8以前的版本这个代码是无法运行的,原因是List<>具有不可协变性,可是在1.8这个版本之后,这是可以运行的。而且里面的内容也的确是实例化了子类。然后我就蒙逼了。说好的Collettion的不可协变性完蛋了。。。。
1.6,1.7都可以运行啊
后来就懂了,当初写的时候认识不清