Curso Java. Volumen XVIII: Polimorfismo

Escrito por Adrián Crespo
Java
1

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.