El polimorfismo permite que una clase hija modifique el comportamiento de un método de la superclase.
Ejemplo con la música
Queremos realizar una aplicación que haga sonar varios instrumentos musicales a la vez para interpretar una composición musical.
Como podemos modelar nuestra orquesta de la forma que prefiramos podemos crear una clase DirectorDeOrquesta que dará órdenes a un listado de instrumentos musicales. De esta forma nuestro director de orquesta puede dar órdenes a una orquesta que tenga un tamaño indeterminado.
Para conseguir esto cada instrumento musical debe responder a una órden específica del director de orquesta. Esta órden puede estar representada por una llamada al método tocar de cada instrumento musical.
Nuestra clase directorDeOrquesta sería algo como:
Clase Director
atributos: listaDeInstrumentos
Métodos: tocarLista
Imaginemos que tenemos la clase InstrumentoMusical y la declaramos así:
Clase InstrumentoMusical
Atributos: nombre, tipo
Métodos: tocar
Esta clase al ejecutar el método tocar mostrará un mensaje por pantalla.
Veamos la definición de la clase InstrumentoMusical con más detalle:
Clase InstrumentoMusical
nombre, tipo
función tocar() {
imprime("El instrumento suena")
}
Ahora imaginemos que queremos declarar las clases Flauta y la clase tambor. La declaración quedaría así:
Clase Flauta que hereda de InstrumentoMusical
función tocar() {
imprime("Piiiiiiii")
}
Clase Tambor que hereda de InstrumentoMusical
función tocar() {
imprime("Bum")
}
De esta forma las clases hijas tienen comportamientos personalizados para el método tocar que ha sido heredado de su clase padre.
El polimorfismo es la capacidad de un programa de detectar la verdadera clase de un objeto e invocar su implementación, incluso aunque su tipo real sea desconocido en el contexto actual.
También se puede pensar en el polimorfismo como la capacidad de un objeto para “fingir” ser otro objeto,
muy interesante