Herencia en Programación
es permitir la creación de nuevas clases basadas en clases existentes. Cuando heredamos de una clase existente, reusamos (o heredamos) métodos y campos, y agregamos nuevos campos y métodos para cumplir con la situación nueva. Cada vez que encontremos la relación "es-un" entre dos clases, estamos ante la presencia de herencia.
Ejemplo
La clase ya existente es llamada superclass, o clase base, o clase padre.
La clase nueva es llamada subclase, clase derivada, o clase hija.
A través de la herencia podemos agregar nuevos campos, y podemos agregar o sobre montar métodos (override). Sobre montar un método es redefinirlo en la case heredada.
Polimorfismo
Es una palabra de origen griego que tiene varios significados. Este termino se utiliza en POO para referirse a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos.
En el siguiente video encontramos un ejemplo de herencia y polimorfismo https://www.youtube.com/watch?v=CoOgbO3JZwM