Un constructor es un método especial de una clase que se llama automáticamente siempre que se declara un objeto de esa clase.
Su función es inicializar el objeto y sirve para asegurarnos que los objetos siempre contengan valores válidos.
Cuando se crea un objeto en Java se realizan las siguientes operaciones de forma automática:
1. Se asigna memoria para el objeto.
2. Se inicializan los atributos de ese objeto con los valores predeterminados por el sistema.
3. Se llama al constructor de la clase que puede ser uno entre varios.
El constructor de una clase tiene las siguientes características:
Tiene el mismo nombre que la clase a la que pertenece.
En una clase puede haber varios constructores con el mismo nombre y distinto número de argumentos (se puede sobrecargar) para permitir inicializar un objeto con más o menos atributos.
Podríamos tener un constructor sin argumentos para crear un objeto con unos atributos por defecto y varios constructores con argumentos dependiendo de a qué atributos queramos dar valor.
Por ejemplo, para la clase Técnico:
public class Tecnico{
public static final double SALARIO_BASE = 600;
private String nombre;
private int departamento;
private float sueldo;
public Tecnico(){ //Constructor sin parámetros.
nombre = "";
departamento = 0;
sueldo = SALARIO_BASE;
}
public Tecnico(String nombre, int departamento, float sueldo){ //Constructor con todos los parámetros.
this.nombre = nombre;
this.departamento = departamento;
this.sueldo = sueldo;
}
public Tecnico(String nombre, float sueldo){ //Constructor con tres parámetros, que utiliza this().
this(nombre, 0, sueldo);
}
}
El primer constructor sin parámetros inicializa todos los atributos con valores por defecto para nombre, departamento y sueldo.
El segundo constructor tiene parámetros para cada atributo de Tecnico.
El tercer constructor tiene dos parámetros, nombre y sueldo. La referencia this se utiliza como forma de envío de llamada a otro constructor (siempre dentro de la misma clase), en este caso el segundo constructor.
Es decir en esta llamada:
Tecnico t3 = new Tecnico (“Jose Luis”, 1300.50f);
Estaremos invocando al constructor con tres parámetros así: Tecnico(“Jose Luis”, 0, 1300.50f)
Los constructores no se heredan
Aunque las subclases heredan todos los métodos y variables de sus superclases, no heredan sus constructores.
Las clases sólo pueden obtener un constructor de dos formas: debe escribirlo el programador o, si éste no lo escribe, debe usar el constructor predeterminado. Siempre se llama al constructor del nivel superior además de llamar al constructor subordinado.
Llamada a constructores de nivel superior
Puede llamar a un determinado constructor de una superclase como parte de la inicialización de una subclase utilizando la palabra clave super en la primera línea del constructor de la subclase. Es preciso suministrar los argumentos adecuados a super().
Cuando no hay ninguna llamada a super con argumentos, se llama implícitamente al constructor de la superclase que tenga cero argumentos. Si en la superclase no hubiera un constructor sin argumentos se produciría un error de compilación.
La llamada super() puede adoptar cualquier cantidad de argumentos adecuados para los distintos constructores disponibles en la superclase, pero debe ser la primera sentencia del constructor.
Recordar:
- Si se utilizan, es preciso que super o this sean la primera línea del constructor.
- Si un constructor no contiene ninguna llamada a super(…) ni a this(…), el compilador introduce una llamada al constructor de la superclase sin argumentos.
- Otros constructores pueden llamar también a super(…) o this(…), con lo que iríamos encadenando llamadas a constructores. Al final el constructor de la clase de nivel superior se ejecutará antes que ningún otro constructor subordinado.
- Un constructor nunca puede tener ambas llamadas super(…) y this(…).
No hay comentarios:
Publicar un comentario