Quizás sea más fácil comenzar con una analogía que no sea de computadora.
Considere si le dijo a alguien que "vaya a la tienda y compre algo de su comida favorita para la cena".
Si le contaras esto a un hijo de 14 años, probablemente iría en bicicleta a la tienda, tendría que pagar en efectivo por la comida, y tendrías pizza para la cena.
Si se lo dijera a su esposa, probablemente conduciría a la tienda, usaría una tarjeta para pagar la comida, y en su lugar podría estar comiendo pollo Cordon Bleu con Chardonnay.
En un programa, las cosas funcionan de la misma manera: se especifica algo en un nivel relativamente abstracto (ir a la tienda y cenar). Cada objeto proporciona su propia implementación concreta de cómo implementarlo y, en muchos casos, proporciona alguna variación en lo que va a hacer exactamente (por ejemplo, como las diferencias en los alimentos favoritos anteriores).
Por supuesto, cuando está programando, la mayoría requiere una especificación mucho más detallada y no ambigua.La idea general sigue siendo la misma sin embargo. Para el escenario anterior, es posible que tenga una clase base person
(o interfaz) que define métodos como go to store
y select favorite food
y pay for purchase
. Entonces tendría implementaciones de eso como adult
y teenager
, cada una de las cuales definía su propio método para ir a la tienda, seleccionar comida favorita y pagar por una compra. Esos métodos serían polimórficos, ya que cada implementación tendría su propia manera de llevar a cabo el comando de nivel superior que usted dio.