Вы находитесь на странице: 1из 8

POLIMORFISMO EN JAVA

El polimorfismo consiste en obtener un mismo mtodo con diferentes funciones.


En general nos sirve para programar objetos con caractersticas comunes y que
todos estos compartan la misma superclase en una jerarqua de clases, como si
todas fueran objetos de la superclase. Esto nos simplifica la programacin.

El polimorfismo se puede establecer mediante sobrecarga, sobre-escritura y


enlace dinmico.

Polimorfismo por Sobrecarga

La sobrecarga de mtodos hace que un mismo nombre pueda representar


distintos mtodos con distinto tipo y nmero de parmetros, manejados dentro de
la misma clase. En el mbito de la POO, la sobrecarga de mtodos se refiere a la
posibilidad de tener dos o ms mtodos con el mismo nombre pero distinta
funcionalidad. Es decir, dos o ms mtodos con el mismo nombre realizan
acciones diferentes y el compilador usar una u otra dependiendo de los
parmetros usados. Esto tambin se aplica a los constructores (de hecho, es la
aplicacin ms habitual de la sobrecarga).

Podemos diferenciar varios mtodos sobrecargados a travs de sus parmetros,


ya sea por la cantidad, el tipo o el orden de los mismos. Veamos un ejemplo:
Polimorfismo por sobreescritura

La sobreescritura se aplica a los mtodos y est directamente relacionada a la


herencia; se refiere a la redefinicin de los mtodos de la clase base en las
subclases.

Por ejemplo, en la relacin de herencia del ejemplo de las figuras aunque la clase
base Figura tiene los mtodos calcularArea y calcularPerimetro, las subclases
Circulo, Cuadrado, Triangulo y Rectangulo redefinen estos mtodos ya que
el clculo del rea y el permetro de cada uno de ellos es diferente.
Ejemplo 2

Definimos la clase numero y las clases hijas Numero positivo y Numero negativo
Las clases hijas implementan los mtodos numero prximo, en la primera clase se
define un contador incremental, en la segunda clase (numero negativo) se toma
como referencia un contador decremental.

Luego se invocan los objetos en el mtodo Main


El resultado de este programa es el siguiente:

Numero positivo inicial: 0


Numero negativo inicial: 0
Numero positivo siguiente: 1
Numero negativo siguiente: -1
Numero positivo siguiente: 2
Numero negativo siguiente: -2.

La conclusin que debemos observar en este ejemplo es que se tienen dos


instancias de Numero, una instancia de NumeroPositivo y una de
NumeroNegativo, cada cual tiene un comportamiento distinto. Sin embargo a la
hora de declararlo se los declaro en su forma genrica de Numero y se tiene el
mtodo prximo () asociado.

El polimorfismo ha permitido que cada uno se comporte de manera distinta, y sin


embargo parece llamarse siempre al mismo mtodo. Es decir, es distinto el
prximo negativo del prximo positivo, y eso se refleja en el resultado.

Otra cosa que puede verse en este ejemplo es que al imprimir los objetos positivos
y negativos se llama automticamente al mtodo toString (), es el modo en el
que Java imprime sus objetos en pantalla. Y el aprovechamiento del mecanismo
de herencia, en la programacin del mtodo toString () que retorna el valor de
numero como un String, es decir, algo que puede imprimirse fcilmente. Al
llamarlo en un NumeroPositivo, como este no lo tiene programado, se ejecuta el
que esta definido en la clase padre Numero. Al llamarlo en un NumeroNegativo
tambin se llama al de la clase padre.
Polimorfismo por Enlace dinmico

Esto permite invocar operaciones en objetos obviando el tipo actual de stos hasta
el momento de ejecutar el cdigo. O sea, nos permite definir elementos como un
tipo e instanciarlos como un tipo heredado. Pero qu utilidad tiene obviar el tipo
de un objeto para luego tomar esta decisin?.

Gracias a que en java la definicin de los tipos de objetos se puede producir por
enlazado posterior (late binding), no nos debe preocupar a qu tipo de elemento le
paso un mensaje, ya que el compilador tomar la decisin sobre qu objeto
ejecutar qu mtodo de acuerdo a la forma de crear la instancia.

Este concepto es bastante complejo de entender, ya que estamos acostumbrados


a definir los elementos de acuerdo a lo que necesitamos. Es decir, si requiero un
entero lo declaro como entero; para qu declarar un elemento como un tipo y
luego usarlo como otro? La respuesta est en que no siempre se puede
determinar exactamente el tipo de elemento que va a usarse en la ejecucin de
nuestro programa.

Se debe tener por lo menos una relacin de herencia que permita determinar un
tipo base para la declaracin, sea cual sea el subtipo que se instancie. Veamos un
ejemplo que nos aclare un poco las cosas:
Vemos que el mtodo muvete llama al mtodo mover de un mamfero y aunque
no sabe con qu clase de mamfero trata, funciona y se llama al mtodo
correspondiente al objeto especfico que lo llama (es decir, primero un gato y
luego un perro). Si no existiera el enlace dinmico, tendramos que crear un
mtodo muevete para los mamferos de tipo Gato y otro para los de tipo
Perro.
EJERCICIOS PROPUESTOS

1. Cree una clase Cilindro que herede las propiedades y el comportamiento de


una clasemadre llamada circulo que tiene el atributo radio y los mtodos
rea y permetro. La clase cilindro debe tener el atributo altura, as como los
mtodos rea y volumen. Implemente una funcin main() que haga uso de
la clase Cilindro y muestre por pantalla el rea del circulo y cilindro, as
como el permetro del circulo y volumen del cilindro.

2. Crear una clase vehculo y dos clases derivadas; vehculo terrestre y


vehculo areo. La clase base definir el atributo consumo_gasolina y un
mtodo costo_viaje a partir de los parmetros km_recorridos y
litros_por_km. Las clases derivadas vehiculoTerrestre con los
atributos velocidad y tiempo y vehculo Aereo con los atributo
horas_de_vuelo y Km_por_horavuelo. Adems debern ofrecer ambas el
mtodo costoviaje. Escribir una funcin main() que cree objetos de las
clases derivadas y que permita obtener los costos a partir de un tipo de
vehculo.

Вам также может понравиться