Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: ronal.d87 en 03 de Septiembre 2018, 17:16

Título: ¿Para qué recibe parámetros un constructor Java? Inicializar objetos CU00640B
Publicado por: ronal.d87 en 03 de Septiembre 2018, 17:16
Hola he aqui el desarrollo de la actividad CU00640B del tutorial de programación orientada a objetos entorno Java de aprenderaprogramar.com

Citar
Define una clase Profesor 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 otro constructor que no reciba parámetros. Crea los métodos para poder establecer y obtener los valores de los atributos. Compila el código para comprobar que no presenta errores, crea un objeto usando un constructor y luego otro objeto usando el otro constructor. Comprueba que se inicializan correctamente consultando el valor de sus atributos después de haber creado los objetos.

Código: [Seleccionar]
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejemplo01;

/**
 *
 * @author Ronnie
 */
public class ProfesorCU00640B {
    private String nombre, apellidos;
    private int edad;
    private boolean casado, especialista;

    public ProfesorCU00640B(String nombre, String apellidos, int edad,
            boolean casado, boolean especialista) {
        nombre = "Juan Diego";
        apellidos = "Mosquera Herrera";
        edad = 18;
        casado = true;
        especialista = true;
    }

    public ProfesorCU00640B() {
        nombre = "";
        apellidos = "";
        edad = 0;
        casado = false;
        especialista = false;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    public void setCasado(boolean casado) {
        this.casado = casado;
    }

    public void setEspecialista(boolean especialista) {
        this.especialista = especialista;
    }

    public String getNombre() {
        return nombre;
    }

    public String getApellidos() {
        return apellidos;
    }

    public int getEdad() {
        return edad;
    }

    public boolean isCasado() {
        return casado;
    }

    public boolean isEspecialista() {
        return especialista;
    }
   
       
}
Título: Re:Respuesta CU00640B
Publicado por: Kabuto en 04 de Septiembre 2018, 01:04
Hola.

El motivo de que un constructor reciba parámetros, es utilizar dichos parámetros para incializar el objeto.
Así que este constructor:
Código: [Seleccionar]
public ProfesorCU00640B(String nombre, String apellidos, int edad,
            boolean casado, boolean especialista) {
        nombre = "Juan Diego";
        apellidos = "Mosquera Herrera";
        edad = 18;
        casado = true;
        especialista = true;
    }

No tendría sentido.
Lo que tiene sentido es recuperar los valores de esos parámetros y adjudicarselos a los atributos del objeto. Tal que así:

Código: [Seleccionar]
public ProfesorCU00640B(String nombre, String apellidos, int edad,
            boolean casado, boolean especialista) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.edad = edad;
        this.casado = casado;
        this.especialista = especialista;
    }

Puesto que los parámetros tienen exactamente el mismo nombre, es necesario usar la palabra reservada this. para que el compilador sepa distinguirlos.
Los que está precedidos de this. corresponden a los atributos del objeto.
Los que no, corresponden a los parámetros del constructor.


Si los parametros tuvieran nombres distintos de los atributos, no sería necesario usar la palabra reservada this. ya que el compilador de Java ahora no tendría problemas para diferenciar los atributos de los parámetros por llamarse diferente.
Mucha gente sigue usando el this. igualmente en estos casos, eso ya depende del gusto de cada uno, pero no sería necesario y el siguiente ejemplo funcionaría perfectamente:

Código: [Seleccionar]
public ProfesorCU00640B(String nom, String ape, int ed,
            boolean cas, boolean espe) {
        nombre = nom;
        apellidos = ape;
        edad = ed;
        casado = cas;
        especialista = espe;
    }