¿Cuál es el beneficio del polimorfismo usando la interfaz de Colección para crear un objeto ArrayList?

Estudié el polimorfismo y entiendo que puede hacer un enlace de método dinámico como a continuación.

Suponiendo que la clase Animal es una clase abstracta.

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

Solía crear instancias de ArrayList como:

ArrayList myList = new ArrayList();

Pero por lo general pensé que la gente escribe:

Collection myList = new ArrayList();

Entonces, mi confusión es ¿cuál es el beneficio de declarar como Colección? Además, no sabía que puede tener "Colección" (que es una interfaz no clase abstracta) frente a "myList".

Por qué no es una buena práctica decir:

ArrayList myList = new ArrayList();

Leí la interfaz de la Colección y los documentos Java de ArrayList, así como los tutoriales en línea, pero aún no estoy muy claro. ¿Podría alguien darme alguna explicación?

Respuestas a la pregunta(8)

Su respuesta a la pregunta