您应该将其声明为
List<Cat>,并将其初始化为
ArrayList<Cat>。
List是一个接口,并且
ArrayList是一个实现类。相对于接口而不是实现,几乎总是比较可取的。这样,如果您以后需要更改实现,则不会破坏使用该接口进行编码的使用者。
根据您实际使用列表的方式,您甚至可以使用不太具体的列表
java.util.Collection(
List扩展的接口)。
至于
List<Cat>(您可以将其读为“猫的清单”)vs
List:这是Java的泛型,可以确保安全地编译时类型。简而言之,它使编译器确保
List仅包含
Cat对象。
public class CatHerder{ private final List<Cat> cats; public CatHerder(){ this.cats = new ArrayList<Cat>(); }}


