1. Ballenas y vacas
Aquí hay un hecho zoológico interesante: una vaca está mucho más cerca de una ballena que, por ejemplo, de un hipopótamo. Resulta que las vacas y las ballenas son parientes relativamente cercanos.
![](https://cdn.codegym.cc/images/article/6cea91f8-acd3-46f7-b3e0-5f70ab825b9c/original.jpeg)
Mira aquí. Hablemos sobre el polimorfismo , otra herramienta muy poderosa de OOP . Tiene cuatro características.
2. La herencia no es una panacea
Imagina que has escrito una Cow
clase para un juego. Tiene muchos campos y métodos. Los objetos de esta clase pueden hacer varias cosas: caminar, comer y dormir. Las vacas también usan una campana que suena cuando caminan. Suponga que ha implementado todo en la clase hasta el más mínimo detalle.
Y luego llega tu cliente y dice que quiere lanzar un nuevo nivel de juego, en el que toda la acción tiene lugar en el mar, y el personaje principal es una ballena.
Comienzas a diseñar una Whale
clase y te das cuenta de que solo es ligeramente diferente de la Cow
clase. La lógica de ambas clases es muy similar y decides usar la herencia.
![Polimorfismo en Java](https://cdn.codegym.cc/images/article/5c0cc5b5-bd4f-474c-8acd-a9258e1802f9/1024.jpeg)
La Cow
clase es ideal para asumir el papel de la clase padre: tiene todas las variables y métodos necesarios. Todo lo que tenemos que hacer es darle a la ballena la capacidad de nadar. Pero hay un problema: tu ballena tiene patas, cuernos y una campana. Después de todo, esta funcionalidad se implementa dentro de la Cow
clase. ¿Qué se puede hacer aquí?
![Polimorfismo en Java. Herencia](https://cdn.codegym.cc/images/article/ec849d92-b871-4f15-9f23-2c02c3681898/1024.jpeg)
3. Anulación de métodos
La anulación de métodos viene a nuestro rescate. Si heredamos un método que no hace exactamente lo que queremos en nuestra nueva clase, podemos reemplazar ese método con otro.
![Anulación de método](https://cdn.codegym.cc/images/article/c635e4bd-ab07-4e14-ad6b-738e1406cecc/1024.jpeg)
¿Cómo se hace esto? En nuestra clase descendiente, declaramos el mismo método que el método de la clase principal que queremos anular. Escribimos nuestro nuevo código en él. Y eso es todo, es como si el método anterior en la clase principal simplemente no existiera.
Así es como funciona:
Código | Descripción |
---|---|
|
|
|
Este código muestra el siguiente texto en la pantalla:
|
|
Este código muestra lo siguiente en la pantalla:
|
Después de heredar la Cow
clase y anular el printName
método, la Whale
clase en realidad contiene los siguientes datos y métodos:
|
No conocemos ningún método antiguo. |
GO TO FULL VERSION