Hola luispdl!
Tu ejercicio cumple con lo requerido en el enunciado de este ejercicio, sin embargo hay unos cuantos puntos a comentar.
1ro: Has declarado "class Medico" esto es valido pero no recomendable, lo correcto seria "public class Medico" si no le indicas al compilador que la clase es publica mediante el controlador de acceso "public" quien mire tu codigo podria pensar que has olvidado incluir esta palabra clave ya que lo normal es declarar:
(tipodeacceso class NombreDeLaClase) public class Medico.
2do: Has inicializado las variables correctamente, cada una con su valor por defecto, pero analizando tu codigo se puede observar que tiene una deficiencia. Cuando por ejemplo invocamos el metodo setNombre(String valorNombre) este nos muestra el siguiente mensaje por pantalla (ejemplo): "Ha cambiado el nombre del medico de nombre a juan. Cuando tiene en su cuerpo la siguiente sintaxis: System.out.println("Ha cambiado el nombre del medico de nombre "+ nombre + apellido + " a "+ valorNombre );
Fíjate que tu intención es primero mostrar el nombre y apellido actual del medico y luego el nombre al que se acaba de actualizar (valorNombre) la variable nombre, seria algo asi como: "Ha cambiado el nombre del medico de nombre jose perez a juan"
Solo esta saliendo el nombre al que acaba de actualizar la variable nombre, porque sucede esto? Es lógico que suceda porque se esta mostrando por pantalla el primer valor de las variables nombre y apellido, el cual según las has inicializado es: ""; (una cadena de texto vacía).
Prueba a inicializar los valores iniciales de nombre y apellido de la siguiente manera: nombre = "Desconocido"; apellido = "Desconocido"; y ahora invoca tu metodo setNombre(String valorNombre);
No notas algo mas lógico?
Conclusión: inicializar variables con su valor por defecto, siempre ha de ser lo mas correcto, a menos que se nos presenten situaciones especiales como estas, donde lo mas logico es asignar como primer valor (inicializar) a las variables nombre, apellido y DNI un valor como "Desconocido"; y especialidad con valor "Desconocida";
Tu constructor quedaría mas o menos asi: public Medico(){
nombre = "Desconocido";
apellido = "Desconocido";
edad = 0;
casado = false;
DNI = "Desconocido";
especialidad = "Desconocida";
}
Y tu metodo setNombre(String valorNombre); quedaría mas o menos asi: public void setNombre( String valorNombre) {
System.out.println("Ha cambiado el nombre del medico de nombre "+ nombre + " " + apellido + " a "+ valorNombre + " " + apellido);
nombre = valorNombre;
}
Segun avances en el curso te daras de cuenta que no es necesario que un método set realice otras tareas aparte de su tarea original (redefnir el valor de una variable), como lo es mostrar un mensaje por pantalla ext..
También mas adelante veras la forma correcta de delarar las variables, cuya sintaxis es:
"tipoDeAcceso tipoDeLaVariable nombreDeLaVariable" (private String nombre) ext.. Pero todo a su tiempo, así que continua avanzando que vas bien.
Saludos!