Devo declarar / inicializar ArrayLists como Lists, ArrayLists ou ArrayLists de <Cat>

Qual é a diferença em declarar uma coleção como tal

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>();
    }
}

questionAnswers(6)

yourAnswerToTheQuestion