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都可以运行啊
后来就懂了,当初写的时候认识不清