Buenas, el ejercicio cumple con lo requerido. Algunos comentarios.
En la clase ListaCantantesFamosos hay dos métodos que usan un parámetro llamado registroCantante, pero un caso con un significado y en otro caso con otro:
public void addCantanteFamoso (CantanteFamoso registroCantante) { listaCantantes.add (registroCantante); }
public CantanteFamoso getCantanteFamoso(int registroCantante) {return listaCantantes.get(registroCantante);}
En el primer caso registrocantente alude a un objeto CantanteFamoso. En el segundo alude a un entero (tipo primitivo). Esto aunque está permitido no es "muy elegante" porque puede originar algo de confusión. Mi recomendación sería usar algo como:
public void addCantanteFamoso (CantanteFamoso registroCantante) { listaCantantes.add (registroCantante); }
public CantanteFamoso getCantanteFamoso(int numRegistroCantante) {return listaCantantes.get(numRegistroCantante);}
Que básicamente es lo mismo, pero donde queda un poco más diferenciado que en un caso se alude a un objeto y en el otro a un entero.
Para quien esté siguiendo el curso y consulte este ejercicio, tener en cuenta que hay algún fragmento de código fuera de los contenidos del curso, por ejemplo:
// Pausar la salida por pantalla *******************
System.out.print("\n******************** PULSE INTRO PARA CONTINUAR ***************\n");
try{
System.in.read();
}catch (IOException ex) { }
El ejercicio puede resolverse sin necesidad de este código, para ver un ejemplo consultar
https://aprenderaprogramar.com/foros/index.php?topic=2889.0Salu2