Curso básico de Java - #14 - POO: Sobrecarga de constructores

Buenas,
En este tema vamos a ver que es y para que sirve la sobrecarga de constructores.

Los constructores, como vimos en el tema #11, son los métodos que se llaman al instanciar un objeto. Estos métodos devuelven el objeto que luego se usara.

Hasta ahora, tanto en la explicación como en otros ejemplos, solo hemos tenido un constructor por clase, cuando en realidad se pueden tener mas.

¿Para que?
Para poder instanciar un objeto de diferentes maneras, bien para correr diferentes procesos, para crear un objeto predeterminado, con mas o menos parámetros…

¿Como se diferencian entre si?
Todos tienen el mismo nombre ya que todos son constructores, entonces, ¿como elegimos cual usar? Pues dependerá de los parámetros que reciba, siendo así que no puede haber dos constructores con los mismos tipos de parámetros en el mismo orden.

Ejemplo

Persona.java
public class Persona
{
	// Atributos de la clase.
	int     edad;
	String  nombre;
	String  profesion;
	Persona madre;  // Es posible usar un objeto de la misma clase donde se usa.
	
	/**
	 * Constructor 1: Instanciara la clase con los parámetros recibidos, nada por defecto.
	 * @param edad (int) Edad de la persona en años. Ej: 32.
	 * @param nombre (String) Nombre de la persona. Ej: Samuel.
	 * @param profesion (String) Profesión de la persona. Ej: Profesor.
	 * @param madre (Persona) Objeto Persona que represente la madre de esta persona.
	 */
	public Persona(int edad, String nombre, String profesion, Persona madre)
	{
		this.edad = edad;
		this.nombre = nombre;
		this.profesion = profesion;
		this.madre = madre;
	}
	
	/**
	 * Constructor 2: Instanciara la clase con los parámetros recibidos.
	 * Al no recibir madre, se supone que no tiene y el objeto Persona tendrá el valor null.
	 * @param edad (int) Edad de la persona en años. Ej: 32.
	 * @param nombre (String) Nombre de la persona. Ej: Samuel.
	 * @param profesion (String) Profesión de la persona. Ej: Profesor.
	 * @param madre (Persona) Objeto Persona que represente la madre de esta persona.
	 */
	public Persona(int edad, String nombre, String profesion)
	{
		this.edad = edad;
		this.nombre = nombre;
		this.profesion = profesion;
		this.madre = null;  // Suponemos que no tiene madre.
	}
	
	/**
	 * Constructor 3: Instanciara la clase con los parámetros recibidos.
	 * Al no recibir madre, se supone que no tiene y el atributo objeto Persona recibirá el valor null.
	 * Al no recibir trabajo, se supone que no tiene y el atributo recibirá el valor "Desemplead@".
	 * @param edad (int) Edad de la persona en años. Ej: 32.
	 * @param nombre (String) Nombre de la persona. Ej: Samuel.
	 * @param profesion (String) Profesión de la persona. Ej: Profesor.
	 * @param madre (Persona) Objeto Persona que represente la madre de esta persona.
	 */
	public Persona(int edad, String nombre)
	{
		this.edad = edad;
		this.nombre = nombre;
		this.profesion = "Desemplead@";  // Suponemos que no tiene trabajo.
		this.madre = null;  // Suponemos que no tiene madre.
	}
}

¿Y ahora como accedo ejecuto un constructor u otro? Pues como he dicho antes según los parámetros:

Persona persona1 = new Persona(49, "María", "Profesora"); // Instancia el objeto usando el constructor 2.
Persona persona2 = new Persona(25, "Samuel", "Arquitecto", persona1); // Instancia el objeto usando el constructor 1.
Persona persona3 = new Persona(15, "Juan"); // Instancia el objeto usando el constructor 3.


En el siguiente tema nos daremos un respiro de la POO y veremos una clase fundamental que ya empiezo a echar en falta para los ejemplos; ArrayList.

No os procupeis prorque para los fans de la POO aun nos quedan conceptos fundamentales colo la herencia, las sub-estructuras enum y algun otro concepto.

2 Me gusta