Dois-je déclarer/Initialiser ArrayLists que des Listes, des ArrayLists, ou ArrayLists de <Cat>

Quelle est la différence dans la déclaration d'une collection en tant que telle

public class CatHerder{
    private List cats;
    public CatHerder(){
        this.cats = new ArrayList<Cat>();
    }
}
//or
public class CatHerder{
    private ArrayList cats;
    public CatHerder(){
        this.cats = new ArrayList();
    }
}
//or
public class CatHerder{
    private ArrayList<Cat> cats;
    public CatHerder(){
        this.cats = new ArrayList<Cat>();
    }
}

OriginalL'auteur davidahines | 2011-03-30