Autor Tema: Java diferencia entre constructor parametrizado y no parametrizado CU00640B  (Leído 9855 veces)

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
HOLA BUEN DIA HE AQUI EL CODIGO DEL EJERCICIO...

Código: [Seleccionar]
package ejemplo;

public class Profesor {
    String nombre, apellidos;
    int edad;
    boolean casado, especialista;
    //constructor cargado por default
    public Profesor(){
        nombre = "Ronald";
        apellidos = "Mosquera";
        edad = 20;
        boolean casado = false;
        boolean especialista = false;
    }
   
    //constructor sin valores cargados
   
    public Profesor (String nuevoNombre, String nuevoApellido, int nuevaEdad, boolean esCasado, boolean esEspecialista){
        nombre = nuevoNombre;
        apellidos = nuevoApellido;
        edad = nuevaEdad;
        casado = esCasado;
        especialista = esEspecialista;
    }
   
//metodos setters y getters
    public void setNombre(String nuevoNombre){
        nombre = nuevoNombre;
    }
   
    public void setApellidos(String nuevoApellido){
        apellidos = nuevoApellido;
    }
   
    public void setEdad(int nuevaEdad){
        edad = nuevaEdad;
    }
   
    public void setEsCasado(boolean esCasado){
        casado = esCasado;
    }
   
    public void setEsEspecialista(boolean esEspecialista){
        especialista = esEspecialista;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public String getApellidos(){
        return apellidos;
    }
   
    public int getEdad(){
        return edad;
    }
   
    public boolean getEsCasado(){
        return casado;
    }
   
    public boolean getEsEspecialista(){
        return especialista;
    }
   
    public static void main (String [] args){
        //creacion de objeto sin parametros
        Profesor profesor = new Profesor();
       
        //creacion de objeto con parametros
        Profesor profesor1;
        profesor1 = new Profesor("Raul","Gonzales",20,true,false);
       
        //resultados del constructor sin parametros
        System.out.println(profesor.getNombre());
        System.out.println(profesor.getApellidos());
       
        //resultados del constructor parametrizado
        System.out.println(profesor1);
    }
}


CUANDO MUESTRO este resultado en la consola sale ejemplo.Profesor@e7b241 ...por favor, como puedo hacer para que se muestren los resultados. gracias
//creacion de objeto con parametros
        Profesor profesor1;
        profesor1 = new Profesor("Raul","Gonzales",20,true,false);
        //resultados del constructor parametrizado
        System.out.println(profesor1);
« Última modificación: 07 de Junio 2015, 22:36 por Alex Rodríguez »
Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00640B REALIZADO
« Respuesta #1 en: 07 de Junio 2015, 18:40 »
Hola Ronal!

Estuve revisando tu código, lo veo muy bien pero haría algunos cambios.

No incluiría el método main dentro de la clase Profesor. En la clase Profesor  dejaría solamente los contructores y los métodos set y get. Incluiría el método main en una clase aparte que podría llamarse TestProfesor.

Por otro lado, el constructor que establece los valores por defecto en la clase Profesor, debería iniciar los campos a los siguientes valores (que se consideran por defecto):

Código: [Seleccionar]
    public Profesor(){
        nombre = "";
        apellidos = "";
        edad = 0;
        boolean casado = false;
        boolean especialista = false;
    }

Saludos, a seguir adelante!

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola ronal.d87, además del aporte que te hizo RaGa, te apunto dos cosas:

1)  En el constructor no debes volver a poner el Tipo (boolean, String, etc.) ya que esto lo has hecho al declarar los campos. Cuando los inicializas n el constructor directamente pones el nombre de la variable

Código: [Seleccionar]
casado = false
2) Al poner

Código: [Seleccionar]
System.out.println (profesor1);
lo que le estas diciendo a java es que imprima una llamada al objeto profesor1 y no el objto en sí mismo. Además recuerda que lo que quieres imprimir, al ser un objeto que posee diversos atributos, por lo que debes especificarle a java qué aspectos de dicho objeto quieres imprimir en pantalla.
Una forma de ponerlo sería

Código: [Seleccionar]
System.out.println (El nombre del profesor es " + profesor1.getNombre() + " " + profesor1.getApellidos + ", y tiene " + profesor1.getEdad() + " años.");

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Recuerden todos, (y ronald, para rellenar la respuesta) lo que ves así con símbolos raros "Profesor@e7b241", se trata de la la ruta o dirección de dicho objeto en java! mas adelante en el curso vas a ver en profundidad eso de las rutas...
"Luchar por tus sueños y cumplirlos... eso es vivir.."

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
HOLA BUENA TARDE, GRACIAS POR RESOLVER MIS DUDAS, MUCHAS GRACIAS. HE AQUI LAS CORRECCIONES, ESPERO ESTEN RESUELTAS.
CLASE PROFESOR
Código: [Seleccionar]
package ejemplo;

public class Profesor {
    String nombre, apellidos;
    int edad;
    boolean casado, especialista;
    //constructor cargado por default
    public Profesor(){
        nombre = "";
        apellidos = "";
        edad = 0;
        boolean casado = false;
        boolean especialista = false;
    }
   
    //constructor sin valores cargados
   
    public Profesor (String nuevoNombre, String nuevoApellido, int nuevaEdad, boolean esCasado, boolean esEspecialista){
        nombre = nuevoNombre;
        apellidos = nuevoApellido;
        edad = nuevaEdad;
        casado = esCasado;
        especialista = esEspecialista;
    }
   
//metodos setters y getters
    public void setNombre(String nuevoNombre){
        nombre = nuevoNombre;
    }
   
    public void setApellidos(String nuevoApellido){
        apellidos = nuevoApellido;
    }
   
    public void setEdad(int nuevaEdad){
        edad = nuevaEdad;
    }
   
    public void setEsCasado(boolean esCasado){
        casado = esCasado;
    }
   
    public void setEsEspecialista(boolean esEspecialista){
        especialista = esEspecialista;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public String getApellidos(){
        return apellidos;
    }
   
    public int getEdad(){
        return edad;
    }
   
    public boolean getEsCasado(){
        return casado;
    }
   
    public boolean getEsEspecialista(){
        return especialista;
    }
}

Ronald Mosquera Mancilla

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
CLASE TESTPROFESOR
Código: [Seleccionar]
package ejemplo;

public class TestProfesor {
    public static void main (String [] args){
        //creacion de objeto sin parametros
        Profesor profesor = new Profesor();
       
        //creacion de objeto con parametros
        Profesor profesor1;
        profesor1 = new Profesor("Raul","Gonzales",20,true,false);
       
        //resultados del constructor sin parametros
        System.out.println("el nombre del profesor es: "+profesor.getNombre()+" "+profesor.getApellidos());
               
        //resultados del constructor parametrizado
        System.out.println("el nombre del profesor es "+profesor1.getNombre()+
                " "+profesor1.getApellidos()+", su edad es: "+profesor1.getEdad());
    }
}

Ronald Mosquera Mancilla

jorgemiralles

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola ronal.d87

Además de lo ya expuesto quisiera comentar:

1) En el constructor sin parámetros tienes estas dos líneas:
Código: [Seleccionar]
boolean casado = false;
boolean especialista = false;
En mi opinión deberías borrar ambas, porque las variables casado y especialista ya las has declarado como propiedades de la clase profesor. Así como está, estás declarando nuevas variables locales al constructor, que entiendo no es tu intención. Además las variables booleanas se inicializan en false automáticamente. También quitaría la siguiente línea:
Código: [Seleccionar]
edad = 0;porque se inicializa automáticamente a 0. (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)

2) Para que la línea antigua que tenías hubiera funcionado:
Código: [Seleccionar]
//resultados del constructor parametrizado
System.out.println(profesor1);
tendrías que haber sobreescrito la función toString() en la clase Profesor de la siguiente manera:
Código: [Seleccionar]
@Override
public String toString() {
   
      return "Nombre: " + this.nombre + "\r\n" +
                "Apellidos: " + this.apellidos + "\r\n" +
                "Edad: " + this.edad + "\r\n";
}
y luego desde TestProfesor llamar a:
Código: [Seleccionar]
System.out.println(profesor1);La función println llamará a la función toString() del objeto. La palabra clave this se refiere a las propiedades la clase actual.
Entiendo que son temas más avanzados, pero te los comento para que los tengas en cuenta.

¡Saludos!

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Jorge, comentarte que dentro de la metodología del curso y con perspectiva didáctica estamos recomendando inicializar siempre los atributos en los constructores a 0, false o null dependiendo del tipo de atributo de que se trate, para hacer la inicialización explícita aún cuando no sea estrictamente necesaria.

También por motivos didácticos los contenidos se tratan progresivamente y aspectos como la sobreescritura de toString() no se tratan en el curso hasta la entrega CU00694B.

Saludos

 

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".