Curso Java. Casting de objetos. Clases y métodos final. Vídeo 44

Curso Java. Casting de objetos. Clases y métodos final. Vídeo 44

Introducción a la Refundición de Objetos en Java

Concepto de Herencia y Modificadores Finales

  • El curso se centra en el tema de la herencia en Java, específicamente sobre la refundición de objetos, también conocida como casting.
  • Se explica que el modificador final puede aplicarse a clases y métodos, limitando su modificación posterior.

Refundición vs. Casting

  • La refundición (casting) permite convertir un objeto de un tipo a otro tipo diferente, lo cual es esencial para trabajar con jerarquías de clases.
  • Se menciona que se utilizará un archivo Java existente para ilustrar cómo realizar esta refundición en la práctica.

Ejemplo Práctico con Arrays

  • En el video anterior, se creó un array de objetos del tipo empleado, incluyendo instancias del tipo jefatura.
  • Se discute cómo almacenar objetos en diferentes posiciones del array y las implicaciones de hacerlo.

Establecimiento de Incentivos

  • Un objeto almacenado debe tener un incentivo establecido mediante un método específico que pertenece a la clase jefatura.
  • Se plantea una situación donde se desea establecer incentivos para un objeto instanciado directamente en el array.

Limitaciones del Tipo Empleado

  • Al intentar acceder al método estableceIncentivo desde una instancia almacenada como empleado, no aparece debido a las restricciones del tipo.
  • La regla "es un" permite almacenar jefes dentro del array empleado, pero limita el acceso a métodos específicos de la clase jefatura.

Solución: Casting o Refundición

  • Para aplicar métodos específicos de una subclase, es necesario realizar una refundición (casting).
  • Se compara el casting entre tipos primitivos y objetos; ambos requieren especificar el nuevo tipo seguido por la variable original.

Proceso para Realizar Casting

  • El proceso implica declarar una nueva variable del tipo deseado y usar paréntesis para indicar qué objeto se está convirtiendo.

Aplicación de Incentivos en Clases de Java

Uso de incentivos en objetos

  • Se establece un método para aplicar incentivos a los objetos, permitiendo la utilización de la clase jefatura y su relación con el método que establece incentivos.
  • Se aplica un incentivo significativo (55,000) para observar claramente la diferencia en el sueldo del objeto, que originalmente es 95,000.
  • Todos los objetos reciben un aumento del 5% en su sueldo mediante el método subes sueldo, aplicable también a objetos de tipo jefatura.

Casting y herencia

  • El resultado del cálculo muestra cómo se incrementa el sueldo total a 154,700 al sumar el salario base más el aumento y el incentivo.
  • Se discute la importancia del casting correcto; un jefe siempre es un empleado, pero no todos los empleados son jefes. Esto se debe al diseño de herencia.
  • Intentar hacer un casting incorrecto (de empleado a jefe) generará un error en tiempo de compilación debido a las reglas de herencia.

Errores comunes en casting

  • Al intentar crear una instancia de jefatura desde una posición que contiene solo un empleado, se produce una excepción porque no se puede convertir directamente entre estas clases.
  • La lógica detrás del casting debe ser cuidadosa; si no tiene sentido según la jerarquía definida por la herencia, resultará en errores.

Concepto de Clases y Métodos Finales

Definición y uso del modificador final

  • Se introduce el concepto de final aplicado tanto a clases como a métodos. Una clase declarada como final impide que sea extendida por otras clases.
  • Ejemplo: Si se crea una clase director que hereda de jefe, esta última podría ser marcada como final para evitar más extensiones.

Jerarquía y limitaciones

  • La clase director heredaría métodos tanto de jefe como de empleado, lo cual aumenta su funcionalidad dentro del sistema.
  • No hay límite teórico sobre cuántas clases pueden extenderse dentro del diseño orientado a objetos; sin embargo, puede haber razones prácticas para limitar esta extensión.

Implementación práctica

  • Para evitar modificaciones futuras por otros programadores o incluso por uno mismo, se recomienda declarar ciertas clases como finales.

Creación de Constructores y Herencia en Java

Implementación del Constructor en la Clase Director

  • Se crea un constructor para la clase director, copiando los parámetros del constructor de la clase padre (jefatura).
  • La clase jefatura ahora tiene métodos de la clase empleado, además de sus propios métodos y futuros métodos que se puedan agregar.

Controlando la Herencia con Clases Finales

  • Para evitar que otras clases hereden de jefatura, se puede declarar como final, lo que detiene la cadena de herencia.
  • Eclipse muestra errores si se intenta crear una subclase de una clase final, indicando que el constructor no está definido.

Métodos Finales y Polimorfismo

  • Declarar un método como final impide su sobrescritura en las subclases. Esto es útil para mantener comportamientos consistentes.
  • El método Dame sueldo en jefatura sobrescribe al mismo método en empleado, permitiendo diferentes comportamientos según el contexto.

Implicaciones del Polimorfismo

  • El polimorfismo permite que el compilador Java determine qué versión del método usar en tiempo de ejecución según el objeto invocador.
  • Es posible querer restringir este comportamiento; por ejemplo, asegurándose de que no haya métodos con el mismo nombre pero diferente funcionalidad.

Ejemplo Práctico: Uso del Modificador Final

  • Un programador puede declarar Dame sueldo como final para evitar cambios indeseados en subclases.
  • Si se intenta sobrescribir un método final, Eclipse indicará un error. Alternativamente, se puede renombrar el método para evitar conflictos.

Consideraciones sobre Clases Predefinidas

¿Qué son los métodos y clases finales en Java?

Métodos Finales en la API de Java

  • En la API de Java, los métodos pueden ser declarados como final para evitar que sean sobrescritos en las clases que heredan de ellos. Esto es importante para mantener el comportamiento original del método.
  • Un ejemplo es el método getTime de la clase Calendar, que está declarado como final public. Esto permite su uso desde otras clases, pero impide que se cree un método con el mismo nombre y diferente comportamiento en una subclase.
  • El método getTime devuelve un objeto de tipo Date, lo cual es crucial para obtener información temporal. Además, el método setTime también es final y requiere un parámetro de tipo Date.

Clases Finales en la API de Java

  • Las clases también pueden ser declaradas como finales. Por ejemplo, la clase Stream está marcada como final para evitar que se herede y se modifique su comportamiento.
  • La declaración de la clase Stream incluye "public final class Stream", lo que asegura que no se pueda extender. Esto rompe la cadena de herencia y protege su implementación.

Herencia e Interfaces

  • La clase Stream hereda de otra clase llamada Object, considerada por muchos programadores como la "clase cósmica". Esta relación será discutida más adelante.
  • Además, las clases pueden implementar interfaces utilizando la palabra reservada "implements". Las interfaces permiten una forma similar a la herencia múltiple, algo no permitido directamente en Java.

Reflexiones sobre Programación en Java

  • Se reconoce que los conceptos discutidos pueden ser complejos para principiantes. La programación es una tarea complicada y Java es considerado uno de los lenguajes más desafiantes.
Video description

Vemos en este vídeo cómo hacer casting con variables de tipo objeto. También vemos como romper la cadena de herencia con las clases final y cómo evitar sobreescribir un método convirtiéndolo en final. Para más cursos, ejercicios y manuales visita: http://www.pildorasinformaticas.com