Hola jasolis he revisado tu código y funciona correctamente realizando su cometido. Puedo señalarte un aspecto que aunque no sea un fallo podría ser mejorado. Te indico cómo podrías mejorarlo para que si tienes interés lo hagas (si quieres pega el código una vez hayas hecho los cambios y te comentaremos de nuevo).
Cuestión 1: en la clase EntradaTeclado para pedir una entrada de teclado y establecer el atributo entrada hemos de crear un objeto, ya que es la única forma de que se nos pida la entrada, el realizarse esa petición dentro del constructor.
Cuestión 2: en la clase TestListaCantantesFamosos lo anterior nos obliga a crear varios objetos EntradaTeclado y surge código repetitivo, por ejemplo:
for(int i = 0; i < 2; i++){
cantante = new CantanteFamoso();
System.out.println("Por favor introduce el nombre del cantante");
entrada = new EntradaTeclado();
cantante.setNombre(entrada.getEntrada());
System.out.println("Por favor introduce el disco con más ventas del cantante " + cantante.getNombre());
entrada = new EntradaTeclado();
cantante.setDiscoConMasVentas(entrada.getEntrada());
listaCantantesFamosos.addCantanteFamoso(cantante);
}
Se repite entrada = new EntradaTeclado(); aquí y en otros puntos...
Mejora del diseño que se podría implementar: en la clase EntradaTeclado crear un método que sirva para pedir la entrada de teclado (de esta forma, no estaría en el constructor, sino en un método).
En la clase TestListaCantantesFamosos crear un único objeto EntradaTeclado e irlo utilizando a través de sus métodos cada vez que sea necesario. De ese modo evitamos tener que repetir entrada = new EntradaTeclado(); en múltiples ocasiones.
Saludos