2.13 POLIMORFISMO

 

El concepto de Polimorfismo está relacionado con el principio de sustitución.

El principio de sustitución se refiere a que se puede utilizar un objeto de la subclase siempre que el programa espere un objeto de la superclase.

O lo que es lo mismo: un objeto se puede comportar de diferente forma dependiendo del contexto. Las variables objeto son polimórficas.

En el ejemplo de la clase Jefatura dependiendo del contexto donde lo ejecutemos se comportara de una forma o de otra.

Si recordamos el método main:

public static void main(String[] args) {

           

            Empleado[] misEmpleados = new Empleado[4];

           

            misEmpleados[0] = new Empleado("Patricia Martinez", 85000, 2000, 03, 03);

           

            misEmpleados[1] = new Empleado("Paco Rodriguez", 45000, 2001, 05, 07);

           

            misEmpleados[2] = new Empleado("Antonio Morales", 42000, 2002, 12, 22);

           

            misEmpleados[3] = new Empleado("Rocio Escarti");

           

            for(Empleado e: misEmpleados) {

                 

                  e.subeSueldo(5);

            }

           

            for(Empleado e: misEmpleados) {

                 

                  System.out.println("Nombre: "+e.dameNombre()+" Sueldo: "+e.dameSue()+

                             " Fecha contrato: "+e.dameFechaAlta());

            }

Creamos un array y dentro de cada elemento del array instanciamos un objeto de la clase Empleado. Vamos a crearnos una instancia de la clase Jefatura y la vamos a almacenar en el array de misEmpleados:

Jefatura jefe_RRHH = new Jefatura("Carlos Saez", 95000, 2000, 05, 05);

           

jefe_RRHH.estableceIncentivo(2550);

Ahora lo vamos a incluir en el array, que es donde viene la novedad:

Empleado[] misEmpleados = new Empleado[5];

           

            misEmpleados[0] = new Empleado("Patricia Martinez", 85000, 2000, 03, 03);

           

            misEmpleados[1] = new Empleado("Paco Rodriguez", 45000, 2001, 05, 07);

           

            misEmpleados[2] = new Empleado("Antonio Morales", 42000, 2002, 12, 22);

           

            misEmpleados[3] = new Empleado("Rocio Escarti");

           

            misEmpleados[4] = jefe_RRHH; //Polimorfismo

Acabamos de utilizar el concepto de Polimorfismo. ¿Qué es lo que está esperando el elemento misEmpleados[4]? Espera que almacenemos dentro de esa posición del array un objeto de tipo Empleado, sin embargo, estamos almacenando un objeto de tipo Jefatura, por lo que estamos empleando el principio de sustitución estamos utilizando un objeto de la subclase siempre que el programa espere un objeto de la superclase.

Para ver el polimorfismo de otra manera podemos añadir otro jefe directamente al array:

            Jefatura jefe_RRHH = new Jefatura("Carlos Saez", 95000, 2000, 05, 05);

           

            jefe_RRHH.estableceIncentivo(2550);

           

            Empleado[] misEmpleados = new Empleado[6];

           

            misEmpleados[0] = new Empleado("Patricia Martinez", 85000, 2000, 03, 03);

           

            misEmpleados[1] = new Empleado("Paco Rodriguez", 45000, 2001, 05, 07);

           

            misEmpleados[2] = new Empleado("Antonio Morales", 42000, 2002, 12, 22);

           

            misEmpleados[3] = new Empleado("Rocio Escarti");

           

            misEmpleados[4] = jefe_RRHH; //Polimorfismo

           

            misEmpleados[5] = new Jefatura("Maria Lopez", 102000, 2001, 03, 03);

Luego mediante un foreach subíamos el sueldo un 5% a todos los empleados, también a los jefes porque son empleados. En el segundo foreach sale por consola la información de cada empleado, su nombre, el sueldo con el aumento del 5% y la fecha de alta de contratación, pero vamos a fijarnos en este foreach en el método dameSue():


Se supone que está llamando al método de la clase Empleado, en la clase Jefatura lo sobrescribimos, si ejecutamos:



Nos fijamos en el penúltimo que es el Jefe de RRHH, Carlos Saez, le dimos un sueldo inicial de 95000:

Jefatura jefe_RRHH = new Jefatura("Carlos Saez", 95000, 2000, 05, 05);

En el primer foreach se le ha aumentado el sueldo un 5%: 99.750.

En el segundo foreach al llamar al método dameSue() ¿cómo sabe Java que es el método de la clase Jefatura y no el de la clase Empleado? Por el concepto de enlazado dinámico. La máquina virtual detecta que este elemento pertenece a la clase Jefatura porque le aplica el método dameSue() de la clase Jefatura y no el de la clase Empleado.


2.12 HERENCIA << >> 2.14 REFUNDICIÓN DE OBJETOS (CASTING)





No hay comentarios:

Publicar un comentario