Autor Tema: Java diferencia entre constructores y métodos con o sin parámetros recibidos obj  (Leído 4264 veces)

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Hola. Aquí está el ejercicio CU00639B del tutorial de programación pdf en Java de aprenderaprogramar como yo lo pude resolver.

Citar
Define una clase Bombero considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), especialista (boolean). Define un constructor que reciba los parámetros necesarios para la inicialización y los métodos para poder establecer y obtener los valores de los atributos.

Código: [Seleccionar]
public class Bombero
{
    private String nombre, apellido;
    private int edad;
    private boolean casado, especialista;
   
    public void Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }
   
    public void setNombreApellido(String valorNombre, String valorApellido){
        nombre=valorNombre;
        apellido=valorApellido;}
       
    public void setEdad(int valorEdad){edad=valorEdad;}
   
    public void setCasadoEspecialista(boolean valorCasado, boolean valorEspecialista){
        casado=valorCasado;
        especialista=valorEspecialista;}
       
    public String getNombre(){return nombre;}
   
    public String getApellido(){return apellido;}
   
    public int getEdad(){return edad;}
   
    public boolean getCasado(){return casado;}
   
    public boolean getEspecialista(){return especialista;}
   
}

Ahora tengo una duda, si yo creo un constructor que reciba parámetros y todos mis atributos lo reciben, es necesario escribir los métodos setters?
Muchas gracias!
« Última modificación: 26 de Agosto 2022, 19:07 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Los constructores se parecen a los métodos, pero no lo son.
La principal diferencia es que NO tienen retorno, así que los constructores no hay que indicar void ni nada:
Citar
    public void Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }

Simplemente se indica que son public, y nada más:

Citar
    public Bombero(String valorNombre, String valorApellido, int valorEdad, boolean valorCasado, boolean valorEspecialista){
        nombre=valorNombre;
        apellido=valorApellido;
        edad=valorEdad;
        casado=valorCasado;
        especialista=valorEspecialista;
    }

Otra cosa, los atributos casado y especialista son cosas distintas, no guardan relación entre ellos, por tanto cada uno debería tener su propio setter, y no uno compartido:
Citar
    public void setCasadoEspecialista(boolean valorCasado, boolean valorEspecialista){
        casado=valorCasado;
        especialista=valorEspecialista;}



Y sobre tu duda:
Los constructores con parámetros y los setters cubren necesidades distintas.

Un constructor con parámetros sirve para poder crear en una sola línea un objeto con valores aplicados en todos sus atributos.
Aquí un ejemplo de un bombero "soltero":
Código: [Seleccionar]
Bombero bombero1 = new Bombero("Paquito", "Mangueras", 25, false, true);
Ya tenemos un bombero construido, pero es posible que luego más tarde queramos cambiar los valores de esos atributos, porque nos hemos equivocado, o porque Paquito se ha casado y ya no es soltero, o por lo que sea...
Entonces que hacemos, ¿llamar a su constructor para crear un nuevo objeto con los nuevos valores de atributos?

Eso no es práctico, además en un programa real donde unos objetos están relacionados con otros, crear un nuevo objeto de cero supone perder esas relaciones e incluso otra información.

Así que lo mejor es usar los setters:
Citar
//Paquito abandona la soltería
bombero1.setCasado(true);
//Ahora además, hay que tratarle como a un señor
bombero1.setNombre("Don Francisco");

Así que como hemos dicho, el constructor con parámetros lo usaremos para la creación inicial del objeto.
Si luego queremos hacer modificaciones de sus atributos, vamos a necesitar los setters.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Genial, muchas gracias por la explicación!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".