Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: MrClassic en 13 de Febrero 2015, 01:04

Título: Sobrecarga de metodos en Java. Explicación de conceptos. Significado de this
Publicado por: MrClassic en 13 de Febrero 2015, 01:04
Cordial saludo,

revisando los temas posteriores a mi ultima entrega, he decidido retomar para interiorizar muchos conceptos y entender mejor dichos temas.
por lo que estare formulando preguntas que me aclaren dudas y me ayuden a interiorizar como dije conceptos que se, son de gran importancia para mi verdadero aprendizaje a futuro.

¿por que si creo un constructor de la forma...?
Código: [Seleccionar]
public class Estudiante{
    //Propiedades
    private String nombre;
    private int edad;
    private String direccion;
    private String telefono;
   
    //Constructor 1
    public Estudiante(){
        this("",0,"","");
    }
}

...debo crear otro de la forma...
Código: [Seleccionar]
public Estudiante(String valorNombre, int valorEdad, String valorDireccion, String valorTelefono){
        nombre = valorNombre;
        edad = valorEdad;
        direccion = valorDireccion;
        telefono = valorTelefono;
    }
...Es decir con parametros para que la compilación no me genere error?
si la logica me dicta que me diante this(), estoy diciendo que me refiero a "esta clase", en la cual ya se declararon variables y se inicializan en los parametros dentro del metodo(no se si es un metodo) this("",0"",""). la verdad me falta una explicación que pueda asimilar mejor, ya que esta inicialización de variables se me hace muy similar a esta...

Código: [Seleccionar]

public Estudiante(){
nombre = "";
edad = 0;
direccion = "";
telefono = "";
}

... la cual no genera errores si se compila sola.

"ejemplo del codigo completo funcional sin errores de compilación..."

Código: [Seleccionar]
package Matricula;

public class Estudiante{
    //Propiedades
    private String nombre;
    private int edad;
    private String direccion;
    private String telefono;
   
    //Constructor 1
    public Estudiante(){
        this("",0,"","");
       /* nombre = "";
        edad = 0;
        direccion = "";
        telefono = "";*/
    }
    //Constructor 2
    public Estudiante(String valorNombre, int valorEdad, String valorDireccion, String valorTelefono){
        nombre = valorNombre;
        edad = valorEdad;
        direccion = valorDireccion;
        telefono = valorTelefono;
    }
}

de antemano Gracias.
Título: Re:Sobrecarga de metodos.
Publicado por: toni_apr en 13 de Febrero 2015, 19:42
Hola MrClassic

La palabra 'this', es una palabra reservada en Java.
Su propósito es referirse a la propia clase, la clase en que se está escribiendo el código.

La linea
this
sin nada más, no tiene ningún significado.

Esta instrucción:
    this ("",0,"","");
en la clase Estudiante es lo mismo que:
Estudiante("",0,"","");
Que es invocar al constructor de la clase con 4 parámetros de tipo String, int, String y String (en ese orden)
Aunque esta instrucción (Estudiante("",0,"","");) dará error.
Así, la única manera de llamar a un constructor específico dentro de la propia clase es usando la palabra reservada 'this'

Si estuvieramos en la clase Profesor
    this ("",0,"","");
sería lo mismo que:
    Profesor("",0,"","");

------------------

Tu constructor 1:
    public Estudiante(){
        this("",0,"","");
    }


Para Java quiere decir: Ejecuta el constructor que tiene estos 4 parámetros. Es decir el constructor que no tiene parámetros lo que hace es llamar al de cuatro parámetros y se los aporta dentro de los paréntesis.

Resumiendo. Si tu clase solo tiene el primer constructor (sin parámetros), y en su código llama a un constructor de 4 parámetros que no se ha escrito, es normal que de error de compilación, lo mismo que si llamas al método dimeLaHora() si no lo creaste en esta clase.

Resumen final:
Primer caso.
El constructor sin parámetros para la clase Estudiante es:
    public Estudiante(){
        nombre = "";
        edad = 0;
        direccion = "";
        telefono = "";
    }

cuando en la clase no hay más constructores.

Segundo caso.
Si en la clase existe el siguiente constructor con parámetros:

    public Estudiante(String valorNombre, int valorEdad, String valorDireccion, String valorTelefono){
        nombre = valorNombre;
        edad = valorEdad;
        direccion = valorDireccion;
        telefono = valorTelefono;
    }


Y en nuestra clase decidimos que también tenga constructor sin parámetros, éste puede ser así:

    public Estudiante(){
        nombre = "";
        edad = 0;
        direccion = "";
        telefono = "";
    }


O así:

    public Estudiante(){
        this("",0,"","");
    }


Espero haber solventado algunas de tus dudas.

Saludos
Título: Re:Sobrecarga de metodos en Java. Explicación de conceptos. Significado de this
Publicado por: MrClassic en 17 de Febrero 2015, 08:39
Cordial Saludo,

He recibido la información y te agradezco por tus aclaraciónes, son muy claras y precisas.


Slds.