# Constructor (informática)

En Programación Orientada a Objetos (POO), un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.
Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos. Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.

## Java

En Java es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede devolver ningún valor (ni siquiera se puede especificar la palabra reservada void). Por ejemplo, si añadiéramos a la clase SSuma un constructor, tendríamos que llamarlo también SSuma. Cuando en una clase no se escribe propiamente un constructor, Java asume uno por defecto.

### Constructor por defecto

Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a cero, los alfanuméricos a nuloPeq, y las referencias a objetos a null).

### Ejemplo

Un constructor por defecto para la clase SSuma quedaría así:
Como se observa el constructor no posee ningún parámetro, ya que como no ha sido definido propiamente por el programador, Java lo hace por default.
Si se define un constructor con parámetros (definido explícitamente) el constructor por default se reemplaza por este.

### Sobrecarga de constructores

A continuación se creará un constructor explícito para una clase simple, utilizando una clase Persona con una serie de atributos.
Primero se declara la clase con sus atributos:
El constructor sin parámetros es reemplazado por el constructor explícito. En este ejemplo se puede observar que los constructores preferentemente se declaran públicos para que puedan ser invocados desde cualquier parte.
Una línea como la que se presenta a continuación, invocará al constructor (por defecto) sin parámetros:
El operador new crea un nuevo objeto, en este caso de la clase Persona, y a continuación se invoca al constructor de la clase para realizar las operaciones de iniciación que estén programadas.
A continuación se invocará al constructor con parámetros, que se introducirán en el orden especificado en el constructor.
Lo anterior permite asignar la información correspondiente a los atributos de nombre, edad, empleo y salario, dicho de otra forma, el constructor permite dar los primeros valores o inicializar los atributos de la clase persona, sin embargo, es importante mencionar que además de constructor por defecto, podemos definir más de un constructor, en donde la diferencia entre uno y otro debe ser el tipo de cada uno de esos parámetros. A continuación se ejemplifica de acuerdo a la clase Persona:
El tercer, cuarto y quinto constructor parecen iguales, pero no lo son, tienen el mismo número de parámetros (en este caso dos), pero no son del mismo tipo, ya que el tercer constructor tiene ambos parámetros de tipo String, pero en el cuarto constructor uno es de tipo String y otro int, por lo tanto eso no ocasionará problemas. Tal vez pareciera que el cuarto y quinto constructor sí son iguales, pero ahora se debe tomar en cuenta el orden, en el cuarto constructor especifica que primero recibe un String y después un int, y el quinto constructor primero recibe un int y después un String, entonces en estos casos ya es importante el orden de los parámetros. Y el último constructor ejemplifica que los constructores, además del constructor por defecto, deben tener desde un parámetro hasta n número de parámetros.
La invocación para los constructores anteriores, sería de la siguiente forma:
En conclusión, al realizar la modificación para disponer de más de constructor, que es el ejemplo anterior, le llamaremos sobrecarga de métodos, es decir, consiste en definir o crear más de un constructor, en donde la diferencia será entre cada uno de ellos será el tipo de cada uno de los parámetros que reciba.
* Datos: Q1049476