Hola.
Comento lo que bajo mi humilde opinión no es enteramente correcto.
Los metodos getter, en principio, solo deberían devolver el valor que le estamos pidiendo.
Salvo casos muy concretos, no deberían encargarse de imprimir por consola ningún mensaje.
Esto es porque estos métodos han de servir para multiples propósitos, no solo para mostrar información en pantalla.
Me explico.
Pongamos como ejemplo este método:
public int getEdad() {
System.out.println("Su edad es de");
return edad;
}
Supón que en nuestro programa tenemos un listado de 50 médicos, es decir, 50 objetos de la clase
Medico.
Y supongamos que queremos calcular la media de edad de estos médicos, por lo que a cada objeto le pediremos que nos de su edad llamando a su método
getEdad().
Esta edad no queremos mostrarla en pantalla, solo queremos que nos la devuelva para poder sumar todas las edades del listado de médicos, y luedo dividir por 50 para obtener la media.
Bien, pues con tu método, al pedir la edad a los 50 médicos, resulta que nos saldría en pantalla 50 veces el mensaje:
Su edad es de
Su edad es de
Su edad es de
Su edad es de
Su edad es de
...
Ni siquiera saldría el valor de las edades, ya que el método no imprime la edad, solo imprime el mensaje "Su edad es de" y el valor lo retorna.
Pero es que para este caso no queremos que imprima la edad, ni el mensaje, ni nada.
Tan solo queremos obtener los valores de cada edad para poder hacer operaciones aritméticas con ellos.
Así que quedaría muy extraño, y esto es porque le estás pidiendo al método
getEdad() que haga cosas que no debería hacer.
Debería limitarse sola y únicamente, a devolver la edad:
public int getEdad() {
return edad;
}
Y ya luego, en el metodo main(), haremos las concatenaciones necesarias para mostrar el mensaje con la edad:
System.out.println("Su edad es de " + medico.getEdad() + " años");
Lo mismo con el resto de metodos "getter":
getNombreMed(), getApellidosMed(), etc...
Deberían ocuparse de retorna el valor del atributo. Ya está, nada más. No es recomendable que además se ocupen de mostrar mensajes por consola ni ninguna otra cosa.
Quizás has incluido estos mensaje debido a este premisa del enunciado del ejercicio:
En cada método, incluye una instrucción para que se muestre por consola un mensaje informando del cambio.Por ejemplo si cambia la especialidad del médico, debe aparecer un mensaje que diga: “Ha cambiado la especialidad del médico de nombre … . La nueva especialidad es: …”.
Vale, pues de esos mensajes deberían encargarse los "setters", no los "getters".
Los "getters" devuelven valores de los atributos, los "setters" se encargan de establecerlos, es decir, modificarlos.
Por ejemplo, si queremos cambiar la especialidad, invocaremos al método
setEspecialidad().
Por lo tanto, será él mismo quien se encargue de lanzar el mensaje informando del cambio.
public void setEspecialidad(String especialidad) {
this.especialidad = especialidad;
System.out.println("Ha cambiado la especialidad del médico de nombre " + this.nombre);
System.out.println("La nueva especialidad es " + this.especialidad");
}
Por último, sobre como tratar el atributo de "casado".
Este atributo es booleano, es decir, solo tiene dos posibles valores:
true o
falseBien, este valor no debemos mostrarlo directamente en pantalla porque no es lo suficientemente informativo para el usuario.
Ni siquiera intentando hacer una aclaración como tú has hecho, no es elegante:
System.out.println(medico.esCasado() + ". Nota si es true (esta casado)\n"
+ "si es false (esta soltero)");
La forma correcta y elegante es comprobar el valor del atributo con
el condicional if y preparar los dos posibles mensajes.
Por ejemplo:
if (medico.esCasado() == true)
System.out.println("Estado civil: Casado");
else
System.out.println("Estado civil: Soltero");
Implica escribir unas poquitas más de lineas de código, pero la información en pantalla es más elegante y correcta.