Qual é o benefício do polimorfismo usando a interface Collection para criar o objeto ArrayList?

Estudei polimorfismo e entendo que ele pode fazer ligação dinâmica de métodos, como abaixo.

Supondo que a classe Animal seja abstrata.

public class AnimalReference
{
  public static void main(String args[])
  Animal ref                 // set up var for an Animal
  Cow aCow = new Cow("Bossy"); // makes specific objects
  Dog aDog = new Dog("Rover");

  // now reference each as an Animal
  ref = aCow; ref.speak();
  ref = aDog; ref.speak();
}

Eu costumava criar instância de ArrayList como:

ArrayList myList = new ArrayList();

Mas geralmente eu pensava que as pessoas escrevem:

Collection myList = new ArrayList();

Então, minha confusão é qual é o benefício de declarar como coleção? Também não sabia que você pode ter "Collection" (que é uma interface que não é uma classe abstrata) na frente de "myList".

Por que não é uma boa prática apenas dizer:

ArrayList myList = new ArrayList();

Eu li os documentos Java da interface Collection e ArrayList, bem como os tutoriais on-line, mas ainda não são muito claros. Alguém poderia me dar alguma explicação?

questionAnswers(8)

yourAnswerToTheQuestion