Hola Xerelo, para comprender el polimorfismo hace falta un poco de tiempo (no es un concepto que se explique y se entiende a la primera) y programar para ir viendo cómo se aplica.
Lo que tú comentas es cierto, si instancias un objeto declarado como A en un objeto de tipo B, al invocar el método DimeEdad() se mostraría 4.
Son ventajas del polimorfismo:
- Te permite crear y recorrer colecciones de objetos de superclase A y subclase B, C, D, E siempre que hereden de A. Si no hubiera polimorfismo no podrías agrupar todos los objetos en una colección porque al ser de distintos tipos no sería posible. En cambio con el polimorfismo defines la colección como de tipo A, y como los objetos son al mismo tiempo tipo A-B, A-C, A-D, A-E puedes mantenerlos en una misma colección.
- Te permite definir interfaces que al mismo tiempo que definen un tipo, obligan a seguir una convención. Esto no es fácil de entender, pero ten en cuenta por ejemplo que distintas clases del api de Java tienen los mismos nombres de métodos, por ejemplo clear, porque implementan una interfaz que define que las clases deben tener un método clear cuyo cometido es el mismo para todas las clases. Esto facilita el trabajo de los programadores, que no tienen que estar buscando en cada clase a ver qué nombre tienen que utilizar, sino que ya lo saben si implementa una determinada interfaz.
Como te decía todo esto no es fácil de entender y hay que irlo entendiendo "poco a poco". Te recomiendo ir siguiendo y haciendo los ejercicios en
http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188, eso facilitará la comprensión de conceptos.
Salu2