Curso Java. Herencia III. Diseñando la herencia. Vídeo 42
Introducción a la Herencia en Java
Conceptos Básicos de Herencia
- La herencia es un tema fundamental en la programación orientada a objetos, que permite reutilizar código de clases existentes.
- Se abordará cómo diseñar una nueva clase que herede de una clase ya creada, facilitando la reutilización del código.
Clase Empleado
- La clase
Empleadotiene dos constructores: uno que requiere nombre, sueldo y fecha de alta, y otro para crear empleados con solo el nombre.
- Incluye un campo estático para asignar IDs únicos a cada empleado y métodos getter y setter para acceder a sus atributos.
Necesidad de Crear una Nueva Clase
- Surge la necesidad de crear una nueva clase para representar jefes, considerando si la clase
Empleadopuede ser utilizada como base.
- Si los jefes reciben incentivos además del sueldo, se plantea si se debe modificar la clase
Empleadoo crear una nueva.
Problemas con Modificar Clase Existente
- Agregar un método para incentivos podría permitir que todos los empleados reciban incentivos, lo cual no es correcto.
- No se diferenciaría claramente entre empleados normales y jefes; por lo tanto, es más adecuado crear una nueva clase.
Diseño de la Nueva Clase Jefe
- La nueva clase debe heredar de
Empleado, manteniendo atributos comunes como nombre y sueldo, pero añadiendo funcionalidad específica para incentivos.
¿Cómo se establece la relación de herencia entre clases en programación?
Definición de Clases y Herencia
- Se plantea la pregunta sobre si un jefe siempre es un empleado y viceversa, lo que ayuda a determinar cuál será la superclase y cuál la subclase.
- Se concluye que la clase "jefe" debe heredar de "empleado", ya que un jefe sí es siempre un empleado, pero no todos los empleados son jefes.
- La respuesta negativa a si un empleado es siempre un jefe refuerza que "empleado" no puede ser una subclase de "jefe".
Construcción de Clases en Eclipse
- Se decide construir la clase "jefatura" como subclase de "empleado", estableciendo así una jerarquía clara entre ambas clases.
- El diseño del programa se enfoca en crear instancias de objetos tipo "jefe" que heredan propiedades de "empleado".
Creación del Constructor
- En Eclipse, se menciona el archivo fuente llamado "uso empleado", donde se encuentran las definiciones necesarias para las clases.
- Se opta por crear la nueva clase dentro del mismo archivo fuente, nombrándola “jefatura” y especificando su herencia con
extends empleado.
Manejo de Errores en Eclipse
- Eclipse señala un error debido a que falta definir el constructor para la clase “jefatura”.
- Se explica que al no haber constructor definido en “jefatura”, Java intenta llamar al constructor por defecto de “empleado”.
Implementación del Constructor Correcto
- Es necesario crear el constructor para “jefatura” que llame al constructor padre, asegurando así una correcta inicialización.
- Un constructor por defecto no recibe parámetros; sin embargo, ambos constructores existentes en “empleado” requieren parámetros específicos.
Llamada al Constructor Padre
- Para solucionar el error anterior, se debe implementar el constructor en “jefatura” con los parámetros necesarios: nombre, sueldo y fecha alta.
- Al construir instancias de “jefatura”, es crucial pasar todos los parámetros requeridos al llamar al constructor padre usando
super().
Creación de Constructores en Clases
Uso de Constructores con Parámetros
- Al pasar cinco parámetros al constructor, se invoca el primer constructor; si se pasa un único parámetro de tipo String, se llama al segundo constructor. Un número diferente de parámetros generará un error de compilación.
- Se crearán objetos de tipo "jefatura" pasando el nombre, sueldo del jefe, año, mes y día como parámetros al constructor.
Almacenamiento y Herencia
- El operador
Newllamará al constructor correspondiente y almacenará los valores en los parámetros antes de llamar al constructor de la clase padre.
- La clase "jefatura" tendrá una variable encapsulada llamada "incentivo", que es un valor decimal representando un incentivo adicional para el jefe.
Métodos Setter y Getter
- Se creará un método setter llamado
estableceIncentivo, que recibirá un valor decimal para almacenar en la variable "incentivo".
- Por convención, las variables se declaran al principio o final, mientras que los métodos se colocan a continuación o antes.
Sobreescritura del Método Dame Sueldo
- Se necesita un método getter para devolver el sueldo del jefe. El método heredado
DameSueldono es adecuado porque no considera el incentivo.
- Para calcular correctamente el sueldo del jefe, se debe sobreescribir el método
DameSueldopara sumar el sueldo base más el incentivo.
Implementación del Método Sobrescrito
- El nuevo método sobrescribirá
DameSueldo, devolviendo la suma del sueldo base y el incentivo. Esto implica declarar una nueva variable dentro del método.
- Eclipse indica errores hasta que se construya correctamente la instrucción return para devolver el resultado esperado.
- La implementación correcta permite que Eclipse muestre un triángulo verde junto al método sobrescrito, indicando que está reemplazando adecuadamente la función heredada.
Conclusión sobre la Sobrescritura
- Al dejar el ratón sobre el triángulo verde en Eclipse, se puede ver que este método está sobrescribiendo a su homónimo en la clase padre.
Implementación del Método "Dame Sueldo" en Herencia
Almacenamiento del Sueldo en la Subclase
- Se busca almacenar el resultado del método
Dame sueldode la clase padre dentro de una variable en la subclase actual.
- El objetivo es guardar el sueldo del empleado y luego devolverlo, sumando un incentivo previamente establecido.
Problemas con la Llamada al Método
- Surge un problema al llamar al método
Dame sueldo, ya que no se sabe cuál versión (de la clase padre o de la subclase) debe ejecutarse.
- Para resolver esto, se utiliza una instrucción que permite especificar que se desea llamar al método de la clase padre, evitando confusiones.
Construcción de la Subclase
- La construcción correcta de la subclase implica asegurarse de que se almacene el valor devuelto por el método adecuado y luego sumar el incentivo correspondiente.
Dificultades para Principiantes
- Los principiantes en programación orientada a objetos pueden encontrar complicado entender conceptos como herencia; es recomendable pausar y revisar los pasos detenidamente.
Avance hacia Ejemplos Prácticos