简单的例子:

public class Person
{
    String name;
}

public class VIP extends Person
{
    String title;
}

然后做:
public static void main(String[] args)
{
    Person p = new Person();
    p.name = "John";

    VIP vip = new VIP();
    vip.name = "Bob";
    vip.title = "CEO";

    List<Person> personList = new ArrayList<Person>();
    List<VIP> vipList = new ArrayList<VIP>();

    personList.add(p);
    personList.add(vip);

    vipList.add(vip);

    printNames(personList);
    printNames(vipList);
}

public static void printNames(List<Person> persons)
{
    for (Person p : persons)
        System.out.println(p.name);
}

在“printNames(vipList)”上给出错误(需要List 找到List )。

这是否意味着尽管VIP是个人,但List 不是List ?

最佳答案

你只是被 Generics 的规则禁止。如果您对如何“修复”这种行为很感兴趣,只需将 printNames() 方法更改为采用 List<? extends Person> 参数即可。

10-08 19:36