Herança e Polimorfismo

Herança, em si, permite definir uma classe geral e, em seguida, classes mais especializadas; simplesmente por adicionar novos detalhes à definição da classe mais geral.


Uma classe mais especializada herda as propriedades da classe mais geral, sendo assim necessário apenas definir as novas características desta.

A Herança é algo muito importante no desenvolvimento, além de com ela você poder reutilizar o código, você pode inda ter um conceito maior de encapsulamento. Imagine como se fosse um banco de dados relacional, com certeza antes devemos projetar o banco para ver como ele ficará. Com sistemas orientados a objetos é da mesma forma.

Polimorfismo, de forma geral, significa "várias formas". Numa linguagem de programação, isso significa que pode haver várias formas de fazer uma "certa coisa". Essas 'certas coisas' são chamadas de métodos. Polimorfismo significa que uma chamada de método pode ser executada de várias formas (ou polimorficamente). Quem decide "a forma" é o objeto que recebe a chamada.
 
Fontes:
http://walfredo.dsc.ufcg.edu.br/cursos/2003/progII20031/aulas/o_que_e_polimorfismo.htm
http://pwp.net.ipl.pt/cc.isel/cvaz/Textos/POO/Heranca.pdf
http://www.plugmasters.com.br/sys/materias/285/1/Heran%E7a-e-Polimorfismo
http://www-usr.inf.ufsm.br/~rose/curso3/cafe/cap4_Polimorfismo.pdf