Anda di halaman 1dari 7

Polimorfismo

Polimorfismo
El polimorfismo permite referirse a objetos de diferentes clases por medio del
mismo elemento y realizar la misma operacin de formas diferentes, de acuerdo al
objeto a que se hace referencia en cada momento.
Otra forma de definir el polimorfismo: el envo del mismo mensaje desencadena
acciones diferentes segn el objeto que lo recibe. Un ejemplo tpico es la operacin
arrancar cuando se aplica a diferentes tipos de motores; en cada caso la operacin
de arrancar se realiza de forma diferente.
La construccin del lenguaje que hace posible el polimorfismo es la ligadura
dinmica (conocida tambin por ligadura tarda o postergada) entre llamadas a
mtodos y los cuerpos reales de dichos mtodos.
La ligadura dinmica supone que el cdigo a ejecutar en respuesta a un mensaje
no se determinar hasta el momento de ejecucin.
En Java la ligadura dinmica se basa en la capacidad de redefinir (reemplazar)
mtodos en la subclase, en el contexto de herencia.

Polimorfismo
Conclusin:
En una jerarqua de herencia, cuando se llama a mtodos desde una referencia a la superclase
que han sido redefinidos en las clases derivadas, lo que se tiene en cuenta es el tipo del objeto
actual referenciado. De tal forma que se ejecutar el mtodo redefinido en el tipo actual.
En definitiva, al llamar a un mismo mtodo sobre una misma variable referencia se producir la
llamada a mtodos distintos dependiendo del objeto referenciado.
En una jerarqua de Vehculos que deben pagar el peaje de una autopista:
Vehiculo cual;
// public abstract class Vehiculo { ... }
cual = new Turismo();
cual.calculoTasa();
cual = new CicloMotor();
cual.calculoTasa();
cual = new Camion();
cual.calculoTasa();
La llamada es sobre una variable de tipo Vehiculo, el mtodo ejecutado depende del objeto actual

referenciado. Ante un mismo mensaje se responde de formas diferente POLIMORFISMO.

USO DEL POLIMORFISMO


El polimorfismo se puede representar con un array de elementos que se
refieren a objetos de diferentes tipos (clases).
Para poder utilizar polimorfismo en Java se deben seguir las siguientes
reglas:
1. Crear una jerarqua de clases con las operaciones importantes definidas por
las mtodos miembro declaradas como abstractos en la clase base.
2. Las implementaciones especficas de los mtodos abstractos se deben
hacer en las clases derivadas. Cada clase derivada puede tener su propia
versin del mtodo.
3. Las instancias de estas clases se manejan a travs de una referencia a la
clase base

Realmente no es necesario declarar los mtodos en la clase

base abstractos, si despus se redefinen (misma signatura) en


la clase derivada.

EJEMPLO DE POLIMORFISMO
Consideremos la clase Instrumento
como la clase base de la que se
derivan otras clases, tales como Piano,
Guitarra, GuitarraElctrica y Bombo.
Cada instrumento musical debe tener
la posibilidad de tocar una pieza y
afinar. En este caso la clase
Instrumento declara los siguientes
mtodos:
class Instrumento
{
public void tocar(String cd)
{

System.out.println("instrumento
interpreta " + cd);
}
// public abstract bool
afinar();
// NO SE DESARROLLA
}
Cada clase derivada debe definir sus propias
versiones concretas de los mtodos que han sido
declarados en la clase base.

class Piano extends Instrumento


{
public void tocar(String cd)
{
System.out.println(
"Piano interpreta "+
cd);
}
}
class Guitarra extends Instrumento
{
public void tocar(String cd)
{
System.out.println(
"Guitarra " + cd);
}
}

class Bombo extends Instrumento


{
public void tocar(string cd)
{
System.out.println(
"Bombo toca " + cd); };
}

Por ejemplo, las siguientes llamadas:


Bombo b1;
b1.tocar("Panocha");
Guitarra g1;
g1.tocar("Aranjuez");
Instrumento it;
it.tocar("Piano");

son llamadas directas, y se enlazan a


un cdigo especfico en la compilacin (
ligadura esttica).

class GuitarraElectrica
extends Guitarra
{
public void
tocar(String cd)
{
System.out.println(
"Guitarra
electrica toca " + cd);
}
}

Ahora se va a llamar al mtodo redefinido tocar() a travs de una referencia a la


superclase Instrumento.
Instrumento pin[]= new Instrumento[5];
for (int i = 0; i < pin.length; i++)
pin[0] = new GuitaraElectica();
pin[1] = new Instrumento();
pin[2] = new Guitara();
pin[3] = new Bombo();
pin[4] = new Piano();

pin[i].tocar("Rumba");

En la llamada pin[i].tocar("Rumba") se produce ligadura dinmica; el compilador no


puede determinar cul es la implementacin especfica del mtodo tocar() que se ha
de ejecutar. La salida que genera la ejecucin:
Guitarra electrica toca Rumba
instrumento interpreta Rumba
Guitarra interpreta Rumba
Bombo toca Rumba
Piano interpreta Rumba
El polimorfismo es una caracterstica de los lenguajes O.O que consiste en que el

mtodo exacto que se llama queda determinado en el momento de ejecucin por la


clase del objeto receptor.

Anda mungkin juga menyukai