Buenos días Santiago, tu código es correcto y cumple con lo que pedía el ejercicio
La clase test como has comentado se podría codificar de forma más breve, pero no te preocupes de eso ahora. A medida que vayas avanzando con el curso y cogiendo práctica podrás ir creando códigos más compactos.
En las líneas
//CantanteFamoso cantante1 = new CantanteFamoso("Artista1", "AlbumMasVendido1");
//CantanteFamoso cantante2 = new CantanteFamoso("Artista2", "AlbumMasVendido2");
miLista.addCantanteFamoso(new CantanteFamoso("Paul McCartney","Capitol"));
miLista.addCantanteFamoso(new CantanteFamoso("Freddie Mercury","A Night at the Opera"));
Ocurre lo que tú mismo has indicado: puedes añadir a la lista tanto objetos directamente (sin nombre, esto serían "objetos anónimos") como objetos creados previamente con un nombre.
A efectos de la lista es indistinto que lo hagas de una manera u otra. Dentro de la lista cada objeto es un objeto, da igual que lo hayas introducido partiendo de un objeto con nombre o de un objeto anónimo. Esto se comenta en el curso.
Saludos