Volvemos otro lunes más con otra entrega del curso de Java.
En la entrega anterior hablamos sobre la llamada a los métodos de la superclase, la redifinición de métodos y de como debe realizarse la llamada al constructor de la superclase desde la clase «hija».
En esta entrega hablaremos del polimorfismo de los métodos, o lo que es lo mismo, métodos que tienen el mismo nombre pero que internamente son distintos, bien sea por el número de parámetros, o por la programación que tienen.
Sin tardar más, vamos con el volumen de hoy.
Os adelantamos que la entrega XX de nuestro curso de Java será un ejercicio que trate todo el tema de herencia y de polimorfismo y empezaremos a aplicar modos de acceso a los métodos y atributos de las clases. Pero esto último lo veremos en el volumen XIX.
Polimorfismo
La palabra polimorfismo viene de “múltiples formas”.
Las operaciones polimórficas son aquellas que hacen funciones similares con objetos diferentes.
Ejemplo: suponer que existe la clase Figura y sus subclases
- Círculo
- Cuadrado
- Polígono
Todas ellas con las operaciones:
- dibuja
- borra
Nos gustaría poder hacer la operación polimórfica mueveFigura que opere correctamente con cualquier clase de figura:
mueveFigura
borra
dibuja en la nueva posición
Esta operación polimórfica debería:
- llamar a la operación borra del Círculo cuando la figura seaun círculo
- llamar a la operación borra del Cuadrado cuando la figura seaun cuadrado
El polimorfismo en Java consiste en dos propiedades:
- Una referencia a una superclase puede apuntar a un objeto de cualquiera de sus subclases.
- La operación se selecciona en base a la clase del objeto, no a la de la referencia.
Gracias a esas dos propiedades, el método moverFigura sería:
Y podría invocarse de la forma siguiente:
- Gracias a la primera propiedad el parámetro f puede referirse a cualquier subclase de Figura.
- Gracias a la segunda propiedad en mueveFigura se llama a las operaciones borra y dibuja apropiadas.
El lenguaje permite que una referencia a una superclase pueda apuntar a un objeto de cualquiera de sus subclases pero no al revés
Justificación:
- un coche es un vehículo
Cualquier operación de la clase Vehículo existe (sobrescrita o no) en la clase Coche.
- Un vehículo no es un coche
Sería un error tratar de invocar la operación:
Por esa razón el lenguaje lo prohíbe.
Hasta aquí el volumen de hoy, sólo nos falta un volumen para acabar todo lo relacionado con la herencia.
En el siguiente volumen como indicábamos anteriormente vamos a tratar los modificadores de acceso en Java y la conversión de referencias y os daremos un breve resumen con los aspectos más importantes del polimorfismo y de la herencia. Podría decirse que es la base para programar utilizando estas técnicas.