Contenido del curso

Construcción de clases y modelado de objetos

Constructores en Java para objetos con datos

Resumen

Crear objetos en Java con información desde el primer momento es posible gracias a los constructores, una herramienta que mejora la seguridad, la legibilidad y la eficiencia de tu código orientado a objetos. Si vienes usando new Película() sin parámetros, aquí descubrirás por qué conviene dar el siguiente paso y cómo aplicarlo en proyectos reales.

¿Qué es un constructor en Java y para qué sirve?

Un constructor es una operación especial que inicializa los valores de un objeto en el momento de su creación. No retorna nada y debe llamarse exactamente igual que la clase. Cuando escribes new Película() sin argumentos, estás usando el llamado constructor por defecto, que Java provee automáticamente mientras tú no definas uno propio.

¿Qué es un constructor por defecto? Es el constructor sin parámetros que Java crea automáticamente si no defines ninguno. En cuanto declaras tu propio constructor, Java deja de proveerlo.

El constructor se declara después de los atributos, como buena práctica, usando la palabra public seguida del nombre de la clase. Dentro recibe los parámetros que el objeto debería tener desde su nacimiento.

¿Cómo se escribe un constructor paso a paso?

Imagina la clase Película. Quieres que toda película nazca con título, duración y género. El constructor se vería así:

java public Película(String título, int duración, String género) { this.título = título; this.duración = duración; this.género = género; this.fechaEstreno = LocalDate.now(); this.disponible = true; }

La palabra reservada this hace referencia a los atributos de la clase y los distingue de los parámetros recibidos, aunque tengan el mismo nombre. También puedes inicializar atributos que no llegan como parámetro, como una fechaEstreno con la fecha actual o un disponible en true por defecto, en lugar del false que trae el tipo boolean.

¿Por qué Java exige parámetros al crear un constructor propio?

En cuanto defines un constructor con parámetros, las instanciaciones tipo new Película() empiezan a marcar error. Esto ocurre porque Java asume que tú, como desarrollador, sabes lo que haces y deja de ofrecer el constructor por defecto. Si quisieras conservar la opción sin argumentos, tendrías que declarar tú mismo un segundo constructor vacío.

La buena práctica indica que una clase debe forzar a recibir los datos esenciales al crear el objeto. Una película sin título o sin duración no tiene sentido en tu modelo, así que el lenguaje te ayuda a evitar ese error desde la compilación.

¿Qué ocurre en una sola línea de instanciación?

Cuando escribes algo como Película p = new Película("Inception", 148, "Sci-Fi"); suceden tres cosas:

  • Declaración: defines la variable p de tipo Película.
  • Instanciación: asignas un nuevo objeto con new Película(...).
  • Inicialización: pasas los datos con los que el objeto arranca su vida.

Esa diferencia es clave para entender el flujo completo de los objetos.

¿Puede una clase tener varios constructores en Java?

Sí. A esto se le llama sobrecarga de constructores y permite ofrecer distintas formas de crear el mismo tipo de objeto. Por ejemplo, puedes tener un constructor con título, duración y género, y otro que además reciba la calificación. Un truco útil en IntelliJ es usar clic derecho, Generate, Constructor, seleccionar los atributos con la tecla Control y dejar que el IDE genere el código.

¿Cómo reutilizar código entre constructores? Llamando a otro constructor de la misma clase con this(...). Debe ser la primera línea del constructor que lo invoca.

Dentro de un constructor puedes llamar a otro usando this(título, duración, género); y luego añadir la lógica adicional, como this.calificación = calificación;. Esto evita repetir asignaciones y mantiene el código limpio.

¿Y si quiero validar datos al inicializar?

Los constructores también pueden invocar métodos del propio objeto. Si tienes un método calificar que valida que la calificación esté entre cero y cinco, puedes reemplazar la asignación directa por this.calificar(calificación);. Así la validación viaja con el objeto desde el momento de su creación, no después.

¿Cómo aplicar constructores a otras clases del proyecto?

La misma lógica se replica en la clase Usuario. Decides qué datos mínimos define a un usuario al nacer: nombre y email, por ejemplo. La fecha de registro se asigna por defecto con la fecha actual dentro del constructor.

java public Usuario(String nombre, String email) { this.nombre = nombre; this.email = email; this.fechaRegistro = LocalDate.now(); }

Al instanciar harías new Usuario("Juan", "juan@platzi.com"); y el compilador rechazará cualquier llamada con parámetros distintos. Esta restricción es justamente la ventaja: tus objetos siempre nacen consistentes.

Los constructores ordenan tu código, evitan estados inválidos y reducen errores cuando creces a decenas de clases y miles de objetos. ¿Cómo estás manejando hoy la creación de objetos en tus proyectos? Cuéntame en los comentarios qué constructor te ha dado más dolores de cabeza.