Hola Adrián:
Estuve revisando tu ejercicio y lo veo muy bien. Solamente haría una observación que sería respecto a las clases Diputado y Senador.
Tal como están codificadas estas clases, daría la impresión de que el atributo 'camaraEnQueTrabaja' debiera haber sido declarado en la clase abstracta y así heredado por ambas clases para optimizar el diseño de las clases.
Otro detalle: si analizamos las clase Senador y Diputado son exactamente iguales, duplicidad de código, y esto no sería óptimo.
Mi sugerencia sería la siguiente:
Como al momento de instanciar un objeto tipo Diputado ya estoy conociendo de antemano que trabaja en la 'Cámara Baja', entonces no sería necesario que sea un atributo que pudiera contener otro valor. Lo mismo sucedería con los objetos tipo Senador.
Por lo tanto eliminaría el atributo 'camaraEnQueTrabaja' de ambas clases.
De esta manera, la clase Diputado podría codificarse:
public class Diputado extends Legislador{
public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta)
{
super(nombre, apellidos, edad, provinciaQueRepresenta);
}
public String getCamaraEnQueTrabaja() {
return "Cámara Baja";
}
public String toString() {
return super.toString().concat("\nCamara en que trabaja: Cámara Baja");
}
}
Y muy parecida sería la clase Senador (la única diferencia sería que habría que cambiar "Camara Baja" por "Cámara Alta").
Luego habría que eliminar el parámetro que ya no existe al momento de instanciar los objetos en la clase Test.
Analízalo y cualquier incoveniente seguimos discutiéndolo. Saludos!