viernes, 31 de agosto de 2012

Polimorfismo

Buenas amigos, en este nuevo tema veremos el polimorfismo.

El polimorfismo es la posibilidad de utilizar una misma expresión para invocar a diferentes versiones de un mismo método. La ventaja principal que tiene, es la reutilización de código.



Aunque esto parezca muy complicado de entender, no lo es en absoluto, por ejemplo, tenemos como en el tema anterior, una clase "padre" llamada "coche" con sus métodos y atributos

posteriormente tenemos otra clase que hereda de "coche"


Bien, como observaréis, esta clase hereda de "Coche" y tiene métodos propios y redefinidos (posteriormente llamaremos a estos métodos redefinidos como sobreescritos) y como dijimos en el tema de las herencias si redefinimos un método o atributo en la clase "hija" ese método o atributo pasará a ser el que se ejecuta (en los atributos SOLO si se llaman igual), ahora pues, creamos un objeto de la Clase "Coche" y empezamos a invocar métodos, pero, ¿qué ocurre?, si creo un objeto de la clase "Coche" e invoco métodos, me invoca los métodos de la clase "padre" Coche, aunque los tenga redefinidos...bien, para eso nos hace falta el polimorfismo, debemos crear un objeto que sea capaz de englobar ambas clases, para ello deberíamos crear un objeto de la clase coche de la siguiente manera:

    • Coche c=new FerrariFormula1();
Esto es así y es legal, es la base del polimorfismo, otra cosa sería poner:
    • FerrariFormula1 c=new Coche();
Esto está mal (hasta que veamos el "casting"), y os revienta el eclipse, es así ya que un Formula 1 no puede ser un golf, o un ford Ka, o cualquier otro tipo de coche, es único, mientras que la clase "Coche" es para todos.



Ahora si, con esto ya nos permite ir invocando métodos de la forma correcta, y con un solo objeto, para el anterior ejemplo también podríamos utilizar 2 objetos, uno para "coche" y otro para "Ferrari", pero consiste en ir simplificando.

Iba a incluir la conversión de tipos, con la palabra reservada "casting" pero lo veremos en tema posteriores, para no cargar el tema este, que tampoco tiene más complicación.

Un saludo.



1 comentario: