Hola Eduardo
Tu ejercicio está muy bien. Y cumple todas las peticiones del enunciado. OK
Quiero darte unos apuntes para mejorar el código:
En primer lugar decirte que una de las convenciones de Java se refiere a los nombres de atributos, variables y métodos.
La convención (que no obligación) de bautizar estos objetos con palabras que empiezan con minúscula, y si el nombre es una palabra compuesta, cada una de las siguientes empezará con mayúscula.
Con esta convención tu atributo listadecantantes pasaría a llamarse listaDeCantantes.
Únicamente las clases empiezan con mayúscula, precisamente para diferenciarse de variables y métodos.
En segundo lugar, otra convención es declarar los atributos de una clase como private (salvo raras excepciones)
¿Porque motivo?
Pues para que haya una única forma de gestionar la información sobre el atributo, a saber, sus métodos set y get (que siempre son públicos)
Finalmente, para contribuir a la encapsulación de la información y eficiencia del código deberías colocar el for extendido que tienes repetido en la clase TestListaCantantesFamosos en la clase ListaCantantesFamosos que es la propietaria de la información que manipula ese for extendido.
Es decir crear en la clase ListaCantantesFamosos un método que se podría llamar, no sé, a ver:
muestrameTodosLosCantantesQueTengoEnMiLista
que usando tu for extendido mostrara la información.
De esta forma cualquier clase puede pedir la lista de cantantes famosos sin tener que escribir código pues ya está incorporado en la clase ListaCantantesFamosos.
Naturalmente al método le puedes dar un nombre más corto, pero siempre descriptivo del trabajo que hace.
Saludos