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 new, Java 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.