Hola jupertivo tu clase EntradaDeTeclado está bien planteada.
En la clase ListaCantantesFamosos tienes esto:
public ListaCantantesFamosos (String nombre) { //Constructor: crea una lista de nombres vacía
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>();
System.out.println ("La lista se llama: "+nombreDeLaLista);
}//Creamos el objeto de tipo ArrayList
Si ves comentarios en otros hilos verás que se recomienda no incluir System.out.println dentro de constructores ni métodos porque la responsabilidad de un constructor es inicializar los atributos de un objeto, no debe hacer nada más que esto (en el caso de métodos, debe cumplir con su responsabilidad y nada más que eso).
En cambio aquí sí lo tienes bien planteado:
public String getNombre (int posicion) {
if (posicion>=0 && posicion<listadenombres.size()) {
return listadenombres.get(posicion);}
else {return "No existe nombre para la posición solicitada";} }
Este método devuelve un String, que puede ser el nombre de la lista, o si no existe un String que es un aviso de que no existe nombre para la posición solicitada.
Tu clase con el main está muy bien, en pocas líneas haces uso de los objetos y diriges el programa.
Supongo que te habrás dado cuenta de que aunque tu código funciona bien no has cumplido con lo que pedía el enunciado:
Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos, pida dos cantantes famosos más al usuario, los añada a la lista y muestre el contenido de la lista por pantalla.
Salu2