En la programación orientada a objetos, un constructor es una función especial que se llama para crear un objeto. Los constructores tienen varias características únicas que les permiten funcionar.

En Java, el nombre de un constructor se basa en su clase. Un constructor es un método, definido en la clase a la que se aplica. Los constructores de Java pueden utilizar la sobrecarga para proporcionar un comportamiento alternativo. Los constructores en Java también pueden hacer uso de la herencia para reutilizar el código.

¿Por qué necesita constructores de todos modos?

Los constructores son un pilar de programación orientada a objetosy Java no es una excepción. Este ejemplo muestra cómo puede definir una clase Circle básica con una propiedad de datos y un método:

Círculo de clase pública {
doble radio público;
public double area () {return 3.14159 * radio * radio; }
}

Luego puede crear una instancia de esta clase e interactuar con ella:

Círculo c = nuevo Círculo ();
c. radio = 2;
System.out.println (c.area ()); // 12.56636
instagram viewer

Pero esto es menos conveniente y robusto de lo que podría ser. Es una buena práctica orientada a objetos encapsular datos, protegiéndolos del acceso no autorizado:

Círculo de clase pública {
privado radio doble;
public double area () {return 3.14159 * radio * radio; }
setRadius vacío público (doble r) {radio = r; }
}

Ahora el código de llamada puede usar el setRadius método y no tener que preocuparse por los detalles de su implementación:

Círculo c = nuevo Círculo ();
c.setRadius (2);

Los constructores ofrecen una forma aún mejor de suministrar datos a un objeto cuando lo crea. Se utilizan muy a menudo para la inicialización de propiedades, como el radio aquí.

Ejemplos de constructores simples

El constructor más básico es uno sin argumentos, que no hace nada:

Círculo de clase pública {
círculo público () {}
}

Ver también: Aprenda a crear clases en Java

Si no define un constructor, Java proporcionará uno predeterminado que se comporta de la misma manera.

Tenga en cuenta un par de cosas:

  1. El nombre del constructor coincide con el nombre de la clase.
  2. Este constructor usa el público modificador de acceso, por lo que cualquier otro código puede llamarlo.
  3. Un constructor no incluye un tipo de retorno. A diferencia de otros métodos, los constructores no pueden devolver un valor.

Los constructores suelen realizar algún tipo de inicialización. Tenga en cuenta que el código anterior no inicializa el valor de radio. En este caso, el idioma lo pondrá automáticamente a cero. Esta clase espera que un usuario use setRadius (). Para usar un valor predeterminado más útil que 0, puede asignarlo dentro del constructor:

Círculo de clase pública {
Círculo público () {radio = 1; }
}

¡Los círculos creados con esta clase al menos ahora tendrán un área real! La persona que llama todavía puede usar setRadius () para proporcionar un radio distinto de 1. Pero el constructor puede ser aún más amigable:

Círculo de clase pública {
Círculo público (doble r) {radio = r; }
}

Ahora puede crear círculos con un radio específico desde el nacimiento:

Círculo c = nuevo Círculo (2);
System.out.println (c.area ()); // 12.56636

Este es un uso muy común para los constructores. Los usará a menudo para inicializar variables a valores de parámetros.

Sobrecarga del constructor

Puede especificar más de un constructor en una definición de clase:

Círculo público () {radio = 1; }
Círculo público (doble r) {radio = r; }

Esto le da al código de llamada una opción de cómo construir objetos:

Círculo c1 = nuevo Círculo (2);
Círculo c2 = nuevo Círculo ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159

Con un círculo un poco más complejo, puede explorar constructores más interesantes. Esta versión almacena su posición:

Círculo de clase pública {
público doble x, y, radio;
Círculo público () {radio = r; }
Círculo público (doble r) {radio = r; }
Círculo público (doble x, doble y, doble r) {
esto.x = x; this.y = y; radio = r;
}

public double area () {return 3.14159 * radio * radio; }
}

Ahora puede crear un círculo sin argumentos, un solo radio o coordenadas xey junto al radio. Este es el mismo tipo de sobrecarga que soporta Java para cualquier método.

Encadenamiento de constructores

¿Qué tal crear un círculo basado en otro? Esto nos daría la posibilidad de copiar círculos fácilmente. Observe el siguiente bloque:

Círculo público (Círculo c) {
esto.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Esto funcionará, pero repite algunos códigos innecesariamente. Dado que la clase Circle ya tiene un constructor que maneja las propiedades individuales, puede llamarlo en su lugar usando el esto palabra clave:

Círculo público (Círculo c) {
esto (c.x, c.y, c.radio);
}

Esta es una forma de encadenamiento de constructores, llamando a un constructor desde otro. Utiliza menos código y ayuda a centralizar una operación en lugar de duplicarla.

Llamar al constructor principal

La otra forma de encadenamiento de constructores ocurre cuando un constructor llama a un constructor de su clase padre. Esto puede ser explícito o implícito. Para llamar a un constructor padre explícitamente, use el súper palabra clave:

super (x, y);

Imagina una clase Shape que actúa como padre del Círculo:

Forma de clase pública {
doble x, y;
Forma pública (doble _x, doble _y) {x = _x; y = _y; }
}

Maneja el posicionamiento común para todas las formas, ya que esta es una funcionalidad que todos comparten. Ahora la clase Circle puede delegar el manejo de posiciones a su padre:

círculo de clase pública extiende la forma {
radio doble;
Círculo público (doble r) {super (0, 0); radio = r; }
Círculo público (doble x, doble y, doble r) {
super (x, y);
radio = r;
}
}

La construcción de superclase es un aspecto muy importante de herencia en Java. El idioma lo aplica de forma predeterminada si no llama explícitamente súper en sus constructores.

Modificadores de acceso en constructores

Los constructores pueden incluir un modificador de acceso en su firma. Al igual que otros métodos, esto define qué tipos de llamadores pueden acceder al constructor:

Prueba de clase pública {
Prueba estática privada uniqueInstance = new Test ();
prueba privada () {}
getInstance () de prueba estática pública {
return uniqueInstance;
}
}

Este es un ejemplo más complicado, así que tenga cuidado de entenderlo:

  • La clase no es abstracta, por lo que es posible crear una instancia de ella.
  • El constructor es privado, por lo que solo esta clase puede crear una nueva instancia.
  • A través de una propiedad y un método estáticos, la clase expone una instancia única de sí misma a los llamadores.

Utilice constructores en Java para crear objetos

Los constructores son vitales para la programación orientada a objetos. Te permiten crear objetos, ¡lo cual es esencial!

En Java, los constructores se parecen a otros métodos y funcionan de la misma manera. Debe recordar las reglas especiales sobre los constructores predeterminados, la sobrecarga y el encadenamiento de constructores. Si los constructores son nuevos para usted, es posible que desee leer sobre los otros conceptos básicos de Java que debe aprender al comenzar.

Correo electrónico
10 conceptos básicos de Java que debe aprender al comenzar

Ya sea que esté escribiendo una GUI, desarrollando software del lado del servidor o una aplicación móvil con Android, aprender Java le será de gran utilidad. A continuación, se muestran algunos conceptos básicos de Java que le ayudarán a empezar.

Leer siguiente

Temas relacionados
  • Programación
  • Java
  • Consejos de codificación
Sobre el Autor
Bobby Jack (51 Artículos publicados)

Bobby es un entusiasta de la tecnología que trabajó como desarrollador de software durante la mayor parte de dos décadas. Es un apasionado de los juegos, trabaja como editor de reseñas en Switch Player Magazine y está inmerso en todos los aspectos de la publicación en línea y el desarrollo web.

Más de Bobby Jack

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Un paso más…!

Confirme su dirección de correo electrónico en el correo electrónico que le acabamos de enviar.

.