Curso Java. Sobrecarga de constructores. Vídeo 39
Introducción a la Sobrecarga de Constructores en Java
Concepto de Sobrecarga de Constructores
- La sobrecarga de constructores permite crear múltiples constructores dentro de una misma clase, lo que facilita establecer diferentes estados iniciales para los objetos.
- Los constructores son responsables de asignar un estado inicial a los objetos, permitiendo elegir qué valores se les otorgan al momento de su creación.
Estructura del Ejemplo Práctico
- Se eliminará la clase de pruebas anterior para centrarse en la clase "uso empleado", que fue creada en videos anteriores.
- La clase "empleado" tiene un constructor que recibe varios parámetros: nombre, sueldo y fecha de alta, utilizando la clase predefinida
Calendar.
Detalles del Constructor Actual
- El constructor actual requiere cinco datos: nombre, sueldo, año, mes y día de alta. Esto permite construir el objeto con toda la información necesaria.
- Además del constructor, hay métodos getter y setter para manipular atributos como el sueldo y obtener información sobre el empleado.
Importancia y Necesidad de Varios Constructores
- Un único constructor limita las posibilidades; si no se conoce algún dato (como el sueldo o fecha), no se puede crear correctamente un objeto.
- La necesidad surge cuando se desea dar diferentes estados iniciales a los objetos. Por ejemplo, si solo se conoce el nombre del empleado.
Implementación Práctica
- Para resolver situaciones donde faltan datos, se puede crear otro constructor que reciba solo el nombre como parámetro.
Constructor y Sobrecarga en Java
Comprendiendo la Llamada a Constructores
- La sobrecarga de constructores puede causar confusión si se pasan el mismo número de parámetros, ya que el compilador no sabría cuál constructor invocar.
- En el método
main, se utiliza un array llamadomis empleadospara almacenar objetos de tipoEmpleado, pasando cinco argumentos al constructor: nombre, sueldo, año, mes y día.
- Al agregar un nuevo empleado al array, es necesario aumentar su tamaño y asignar valores utilizando el operador
new.
Diferenciación entre Constructores
- La elección del constructor depende del número de argumentos pasados; cinco argumentos llaman al primer constructor, mientras que uno llama al segundo.
- Si solo se pasa un argumento (nombre), se invoca el segundo constructor. El compilador distingue entre los constructores según la cantidad de parámetros.
Problemas con Argumentos Inadecuados
- Si se pasan dos o ningún argumento, surge un problema porque el compilador no sabe qué constructor utilizar.
- Se crea un objeto
Empleadocon estado inicial diferente; por ejemplo, solo tiene nombre y su sueldo y fecha son cero.
Estado Inicial de Objetos
- Al ejecutar el programa, los primeros tres empleados tienen información completa, mientras que el último solo tiene nombre y valores predeterminados para sueldo y fecha.
- La fecha no es igual a cero porque está almacenada como un objeto (
Date), que por defecto es nulo si no recibe valor inicial.
Creación de Empleados sin Información Completa
- Se pueden crear múltiples constructores para proporcionar diferentes estados iniciales a los objetos. No hay límite en la cantidad siempre que reciban diferentes números de parámetros.
- Para empleados sin toda la información disponible (como sueldo o fecha), se desea establecer valores predeterminados en lugar de ceros.
Asignación de Valores Predeterminados
- Se propone dar valores por defecto (por ejemplo, sueldo base 30.000 y una fecha predefinida).
- Cuando se crean instancias dentro del método
main, si falta información, se pueden asignar estos valores predeterminados automáticamente.
Uso del this en Constructores
Parámetros y el uso de this
- Se menciona la necesidad de pasar parámetros al constructor, especialmente cuando se desconoce información como el sueldo o la fecha.
- Se explica que si el nombre del parámetro coincide con una variable de clase, se utiliza
thispara referirse a la variable de clase.
- El uso de
thispermite diferenciar entre el parámetro y la variable de instancia dentro del constructor.
Construcción de Objetos Desconocidos
- Se propone un segundo constructor que asigna valores por defecto a los objetos cuando se desconoce información específica.
- Al usar
this, se llama automáticamente al otro constructor con los parámetros correspondientes, facilitando la creación de objetos.
Ejecución y Comportamiento del Programa
- Si hay múltiples constructores,
thisllamará al que coincida con el número de parámetros proporcionados.
- La instrucción
this(...)permite almacenar valores en las variables adecuadas del otro constructor, simplificando así la construcción de objetos.
Ventajas en la Sobrecarga de Constructores
- Al crear muchos objetos tipo empleado, se pueden utilizar valores por defecto sin necesidad de especificar todos los parámetros manualmente.
- El programa detecta automáticamente qué constructor utilizar según los parámetros pasados al crear un objeto.
Concepto y Utilidad del Constructor por Defecto
Creación Sin Constructores Específicos
- Se discute la posibilidad teórica de tener clases sin constructores definidos, lo cual no es común ni útil en este contexto específico.
- Un "constructor por defecto" es aquel que tiene el mismo nombre que la clase y no recibe parámetros; está vacío si no se define explícitamente.
Limitaciones y Consideraciones
- Aunque es posible crear una clase sin constructores específicos, esto puede llevar a instancias sin estado inicial definido (sin nombre ni sueldo).
¿Qué es un constructor por defecto en Java?
Conceptos sobre constructores en Java
- Se menciona que el uso del operador y el constructor por defecto en la clase
Empleadono genera errores, a pesar de que no se haya definido explícitamente un constructor. Esto indica que Java proporciona un constructor por defecto automáticamente.
- Aunque los objetos son creados sin errores, estos no tienen valores asignados para sus atributos como nombre, sueldo o fecha. Este fenómeno se refiere al "constructor por defecto", que permite la creación de objetos sin inicialización.
- Se introduce el concepto de sobrecarga de constructores, donde se pueden definir múltiples constructores con el mismo nombre pero diferentes parámetros. Esto permite crear instancias de una clase con diferentes configuraciones iniciales.
Sobre carga de métodos
- Además de la sobrecarga de constructores, también existe la sobrecarga de métodos en Java. Esto significa que puedes tener varios métodos con el mismo nombre siempre y cuando tengan diferente número o tipo de parámetros.