我们先来看一段代码:
String s = new String();
Object o = s;
这样写是没有问题的,因为String是Object的子类。现在我们来看另一段代码:
List<String> ls = new ArrayList<String>();
List<Object> lo = ls; //compile error
这段代码能过通过编译吗?答案是不行,因为虽然String是Object的子类,但是List<String>不是List<Object>的子类。List<String>和List<Object>都是Object的子类。
Generic Classes and Subtyping
假设我们自己定义了一个接口,他继承了List<E>这个接口:
interface PayloadList<E,P> extends List<E> {
void setPayload(int index, P val);
...
}
那么就会有以下层级关系: