Hola Bienvenida al Foro.
Bueno, la funcionalidad de un constructor básicamente es la de construir el objeto y que dependiendo de los parámetro que se pasen este se cree de una u otra forma.
Por ejemplo una clase perro:
public class Perro {
private int height;
}
Los
atributos de la clase son las propiedades que el objeto posee, en este caso el nombre y la altura. Estos se suelen declarar de manera privada para dar un acceso limitado a ellos, es lo que se conoce como
encapsulación, y para editar sus valores se suele hacer lo que se llama
métodos accesores (accesors) también conocidos como
setters y
getters, los setters asignan un valor al atributo, y getters obtienen dicho valor. Entonces digamos que le quieres poner un nombre al perro, añades un
setter de la siguiente manera:
public class Perro {
private int height;
public void setName
(String n
) { this.name = n;
}
}
y si quieres obtener el nombre del perro añades un método getter:
public class Perro {
private int height;
public void setName
(String n
) { this.name = n;
}
return this.name;
}
}
Ahora digamos que a la hora de
instanciar o crear el objeto quieres de una vez inicializar el nombre de Perro, entonces en ese momento
creas un constructor con parámetros el constructor se llamará cada vez que un objeto de tipo Perro (en este caso) sea creado o instanciado. Agregamos el constructor, que
no tiene tipo y lleva el
mismo nombre de la clase, y
suele ser público:
public class Perro {
private int height;
this.setName(n);
}
public void setName
(String n
) { this.name = n;
}
return this.name;
}
}
Ahora cuando vallas a crear un nuevo objeto de tipo Perro entonces puedes inicializar el atributo nombre de na vez:
public class MainApp {
public static void main
(String args
[]) { Perro perro = new Perro("Otto");
}
}
Pero eso quiere decir que todos los objetos de tipo Perro que crees han de llevar el el valor de atributo nombre a la hora de instanciar, si quieres evitar esto, entonces
los constructores se pueden sobrecargar, lo que quiere decir que vas a tener
varios constructores que reciben distintos parámetros, así puedes tener los siguientes:
public class Perro {
private int height;
public Perro () {
}
this.setName(n);
}
public Perro
(String n,
int a
) { this.setName(n);
this.setHeight(a);
}
public void setName
(String n
) { this.name = n;
}
return this.name;
}
public void setHeight(int n) {
this.height = n;
}
public int getHeight() {
return this.height;
}
}
Como verás he agregado un setter y un getter también para la altura, además de un constructor vacío para crear el Objeto sin inicializar ninguno de sus atributos. El anterior código nos permite entonces crear Objetos de tipo Perro de la siguiente forma:
public class MainApp {
public static void main
(String args
[]) { Perro perro = new Perro();
Perro perro1 = new Perro("Otto");
Perro perro2 = new Perro("Otto", 30);
}
}
Como verás entonces los constructores se usan para ejecutar los
procesos de inicialización de un objeto, que en principio para objetos simples suele ser la
inicialización de sus atributosSi no especificas un constructor
Java agregara un constructor vacío que recibe el nombre de
constructor por defecto.
Por último tienes un pequeño error al usar el método mostrar por consola, donde le pasas un parámetro de tipo perro, pero como ves
este no recibe parámetros:
public void mostrarenlaconsole()
así que la forma correcta de usarlo es simplemente:
perro.mostrarenlaconsole();
Te darás cuenta que a medida que avanzas en el Lenguaje el tema de los constructores se va haciendo cada vez un poco más complejo, esto a la hora de usar
Interfaces,
Enums, o construir Objetos con constructores de clases
heredadas usando el tipo de mayor rango (esto es en todo caso conceptos propios de la
POO)
Saludos