Hola espero esto pueda ayudarte!
Herencia
Herencia en la programación orientada a objetos es la habilidad de extender una funcionalidad existente definiendo una nueva clase que hereda funcionalidad de una clase existente. Lo cual nos ahorrara mucho tiempo a los programadores.
Si contamos con una clase que se acerca a lo que necesitamos; no es necesario crear una clase desde cero. Podemos aprovecharla y extenderla para crear nuestra nueva clase. Esta nueva clase se llamara subclase y la clase que ya teníamos se llamara superclase.
La subclase heredara todos los atributos y los métodos que fueron definidos en la clase padre. Si necesitamos cambiar algún método, se puede sobrescribir el comportamiento en nuestra subclase; utilizando el mismo nombre y los mismos argumentos del método que se encuentra en la subclase. O bien si se requiere crear un nuevo método lo podemos incluir en nuestra subclase.
Una clase puede heredar atributos por dos superclases (clases padres). La herencia múltiple puede ser usada para agrupar atributos y métodos de distintas clases en una sola.
Ejemplo:
Polimorfismo
Significa literalmente muchas formas. En programación orientada a objetos es una tecnica para optimizar la funcionalidad basada en tipos particulares.
La diferencia entre herencia y polimorfismo es que herencia está relacionada con clases y polimorfismo con métodos.
Existen 3 tipos de polimorfismo:
- Sobrecarga:
Es cuando existen funciones con el mismo nombre, con funcionalidad similar; en clases que son completamente independientes una de la otra.
- Paramétrico:
Existen funciones con el mismo nombre pero se usan diferentes parámetros (nombre o tipo). Se selecciona el método dependiendo del tipo de datos que se mande.
-Inclusión:
Es cuando se puede llamar a un método sin tener que conocer su tipo, así no se toma en cuenta los detalles de las clases especializadas, utilizando una interfaz común.