对象类型列表与扩展类型的对象列表之间的差异

时间:2016-10-17 19:58:05

标签: java oop arraylist interface extends

我经常会遇到以下情况:

List<Fooable> fooList;

VS

List<? extends Fooable> fooList;

这两者有什么区别?或者是否存在此/已存在链接的名称,其中描述了这种差异?我不能谷歌这个概念,因为我不知道它被称为什么,或者你怎么形容这个。

如果Fooable是一个接口,这有关系吗?一个具体的课程?一个抽象类?这仅适用于扩展和/或实现某些内容的类吗?

1 个答案:

答案 0 :(得分:1)

好吧,如果没有重复......

List<Animal> 可以包含CatDog s。您可以将猫和狗添加到列表中。这并不意味着它只能包含Animal s。

但是如果您有方法foo(List<Animal> foo),则无法将List<Cat>传递给它。但您可以将CatDogAnimal添加到已通过的List<Animal>

如果您有foo(List<? extends Animal> foo),则可以将List<Animal>List<Dog>List<Cat>传递给它并从中读取,即您可以访问{{1}方法。

但是因为Animal的任何子类型列表都可以传递给它(您不知道哪种类型,可能是AnimalAnimal或{{1 }或者一些完全不同的Cat,你不能添加任何元素(Dog除外)。