martes, 11 de julio de 2017

Todo sobre: Constructores en Java

Constructores
Para crear un objeto se utiliza el operador new. Si no se ha definido un método constructor para la clase, entonces el objeto se instancia indicando el nombre de la clase y a continuación un paréntesis abierto y otro cerrado.

Si ya se ha definido un método constructor, entonces no es posible instanciar un objeto utilizando el constructor por defecto. Cuando se invoca al constructor por defecto se asigna un espacio de memoria para el nuevo objeto y sus atributos se inicializan a los valores por defecto correspondientes a su tipo. Los números enteros se inicializan a cero, los números reales a 0.0, los valores lógicos a false, los caracteres se inicializan a \u0000 y las referencias a null.

En una clase se pueden definir uno o más métodos constructores para iniciar los atributos de un objeto con valores distintos de los valores por defecto de Java. Para instanciar un objeto es necesario indicar los valores iniciales de sus atributos cuando se ejecuta el método constructor. En la clase Vehiculo se ha definido un método constructor que inicia los atributos matricula, marca, modelo, color y tarifa.



A veces es necesario contar con diferentes métodos constructores con distintos parámetros. Por ejemplo, se podría crear un objeto de la clase Vehiculo sin conocer la tarifa de alquiler. El método constructor debería iniciar la tarifa a cero.

public Vehiculo(String matricula,
String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;
this.disponible = false;
}

Cuando se definen dos o más métodos constructores para la clase Vehiculo, se dice que el método constructor de la clase está sobrecargado. En este ejemplo la diferencia entre los dos métodos es que el primero recibe cuatro parámetros e inicia la tarifa a cero, el segundo recibe cinco parámetros, uno de ellos para iniciar la tarifa del vehículo.

public Vehiculo(String matricula,
String marca,
String modelo,
String color)
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa)

La clase Vehiculo con dos métodos constructores.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
public Vehiculo(String matricula,
String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;
this.disponible = false;
}
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

Java diferencia los métodos sobrecargados por el número y el tipo de los argumentos que tiene el método. En la clase Vehiculo el número de parámetros de los dos métodos constructores es diferente.

Cuando se invoca al método constructor de la clase con el operador newJava selecciona el método que debe ejecutar por el número y el tipo de argumentos que recibe.

Creación de objetos de la clase Vehiculo utilizando ambos métodos constructores.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
"León",
"Negro");



El objeto vehiculo1 se instancia ejecutando constructor de cinco parámetros, mientras que vehiculo2 se instancia ejecutando el constructor de cuatro parámetros.