¿Qué significa constructor?
Un constructor es un método especial de una clase o estructura en programación orientada a objetos que inicializa un objeto recién creado de ese tipo. Siempre que se crea un objeto, se llama automáticamente al constructor.
Un constructor es como un método de instancia que suele tener el mismo nombre que la clase, y puede utilizarse para establecer los valores de los miembros de un objeto, ya sea a valores por defecto o a valores definidos por el usuario.
Sin embargo, aunque se le parece, un constructor no es un método propiamente dicho, ya que no tiene un tipo de retorno. En lugar de realizar una tarea ejecutando código, el constructor inicializa el objeto, y no puede ser estático, final, abstracto ni sincronizado.
Definición de constructor
Los constructores no se llaman explícitamente y sólo se invocan una vez durante su vida. En el caso de una jerarquía de clases en la que una clase derivada hereda de una clase padre, la secuencia de ejecución del constructor es una llamada primero al constructor de la clase padre y luego al de la clase derivada. Los constructores no pueden heredarse.
Los usuarios no necesitan escribir constructores para cada clase. Un constructor puede declararse utilizando cualquiera de los modificadores de acceso. Es obligatorio tener un constructor con el modificador de acceso adecuado.
Sin embargo, el compilador proporciona un valor por defecto si no se define un modificador de acceso en la clase y no se declara un constructor. Este constructor por defecto no puede encontrarse dentro del código fuente, ya que se encuentra en el archivo .class. Su comportamiento depende del lenguaje.
Aunque a menudo se confunde con un constructor por defecto, en Java también existen constructores sin argumentos y se denominan «constructores sin argumentos». Aunque comparten la firma con el constructor por defecto, el cuerpo de los constructores sin argumentos no está vacío y pueden tener cualquier código. Los constructores con argumentos, en cambio, se conocen como «constructores parametrizados».
Si un constructor se declara como privado, la clase no puede crearse ni derivarse y, por tanto, no puede instanciarse. Sin embargo, un constructor de este tipo puede sobrecargarse con distintos conjuntos de parámetros.
En el diseño de constructores se recomienda lo siguiente:
- La lógica que implica operaciones específicas que deben ejecutarse en un evento concreto de una aplicación -como abrir una conexión a una base de datos- no debe escribirse en un constructor.
- Cuando se utilicen constructores de clases derivadas, al constructor de la clase padre se le deben pasar los parámetros correctos.
- El código se mantiene mejor si la inicialización y demás lógica relacionada se realiza en un constructor principal y se realiza una llamada cruzada a este constructor desde otros constructores sobrecargados.
- Como un constructor no puede devolver un valor al código que lo llama, es una buena práctica lanzar una excepción cuando se produce un fallo.
El encadenamiento de constructores se produce siempre que una clase base es extendida por una clase hija. Por tanto, se invoca primero a la clase padre cada vez que se crea un objeto de esa clase hija.