De todas formas, el nivel de abstracción ha de ser
el adecuado, lo mismo es pasarse por alto que por bajo. El nivel más alto que te permita hacer lo que quieras sin "demasiadas molestias" suele ser el adecuado
.
A nivel práctico, la diferencia es que a través de la referencia codigo2, unicamente puedes acceder al objeto usando los miembros de la clase Collection, sea lo que sea el objeto en si. A través de la referencia codigo, puedes usar los miembros de la clase ArrayList.
Pero el objeto es el mismo. Dependiendo de lo que quieras hacer dentro del metodo, es mejor declararlos de una forma o de otra.