Revista Informática

Polimorfismo en Java

Publicado el 01 junio 2013 por Cristian David Henao Hoyos @chenaooo
Polimorfismo en JavaAl escuchar la palabra polimorfismo lo primero que se nos viene a la mente es "Muchas Formas" y bueno, si, básicamente esta es la idea general, pero y que mas gira en torno a esto???........
en esta entrada veremos algunos ejemplos y puntos a tener en cuenta sobre el polimorfismo en la programación orientada a objetos y para eso aplicaremos otros conceptos trabajados con anterioridad..... y mas adelante desarrollaremos un ejemplo en Java donde pondremos a prueba lo aprendido en esta entrada......
Algunas Ideas.
Como se mencionó en la entrada sobre Conceptos Básicos, podemos definirlo como la capacidad que tienen los objetos de comportarse de múltiples formas, programando de manera general en vez de hacerlo de forma especifica...
Alguna vez consultando, definían este concepto como la forma en la que podemos tratar una subClase como si fuera una Clase del tipo de su superClase, usando solo los métodos o atributos disponibles para la Clase declarada..... es decir, si tenemos una clase "X" podemos decir que "X" es de tipo "Y" esto se cumple solo si existe una relación de herencia entre ellas, ya sea si "X" hereda de "Y" (extends) o si "X" implementa a "Y" (implements)
Retomando (de manera reducida) el ejemplo de la entrada sobre conceptos básicos en el punto sobre polimorfismo, se explica mejor lo anterior usando "X" como cualquier clase Cuadrado, Triangulo o Circulo y "Y" como la clase FiguraGeometrica, por lo tanto decimos que por ejemplo la clase Triangulo es de tipo FiguraGeometrica, en Java esto lo representamos asi:
class FiguraGeometrica{
}
class Triangulo extends FiguraGeometrica {
}
public class Principal{
public void metodo(){
/**Puedo crear objetos polimorficos*/
/**Objeto Triangulo de tipo FiguraGeometrica*/
FiguraGeometrica triangulo=new Triangulo();
}
}

Vemos que FiguraGeometrica es la superClase y Triangulo es la clase hija o subClase, y por medio del polimorfismo podemos crear una instancia de Triangulo de tipo FiguraGeometrica...
Algunas Consideraciones. 
(Estas consideraciones fueron tomadas de la revista digital JavaWord pues me parecen muy claras a la hora de trabajar con polimorfismo.)
Como en todo, tenemos unas reglas que se deben cumplir y tener en cuenta cuando vamos a trabajar con objetos polimorficos, estas son :
  • Una variable de referencia puede ser de un solo tipo, y una vez que fue declarada, ese tipo jamás puede modificarse..... por ejemplo, si declaramos triangulo de tipo FiguraGeometrica, no podemos decir mas adelante que el mismo objeto triangulo es de tipo FiguraPuntiaguda...
  • Una referencia es una variable, de manera que puede ser reasignada a otros objetos (a menos que se declare como final). por ejemplo podemos hacer lo siguiente:
 FiguraGeometrica miFiguraGeometrica = new FiguraGeometrica();
Cuadrado miCuadro=new Cuadrado();

/**Puedo crear objetos polimorficos, asignando su referencia*/
miFiguraGeometrica=miCuadro;
  • Una variable de referencia puede tomar como referencia cualquier objeto del mismo tipo, o un subtipo del mismo..... va muy ligada a la anterior, pero nos dice que si por ejemplo tenemos la clase cuadroPequeño que es subClase de cuadro, al ser "nieta" de FiguraGeometrica, si se crean instancias de ella, se pueden reasignar a instancias de FiguraGeometrica... 
  • Un tipo de variable de referencia determina los métodos que pueden ser invocados sobre el objeto que la variable referencia.... Triangulo al ser de tipo FiguraGeometrica puede acceder no solo a los métodos de la clase Triangulo sino también a los de FiguraGeometrica (Claro, pues tiene que existir una relación de Herencia entre ellos)
  • Una variable de referencia puede tener como tipo el de una interface. Si es declarada de esta manera, podrá contener cualquier clase que implemente la interfaz..... las interfaces también permiten el uso de herencia, por lo tanto podemos crear objetos usando para esto una interfaz, por ejemplo si FiguraGeometrica fuera una interface, lo anterior seria igual..... (esto también aplica para las clases Abstractas).

Como mencionamos en entradas pasadas, las clases abstractas y las interfaces (al ser clases completamente abstractas) no pueden ser instanciadas, o no directamente, la única forma de hacerlo es mediante la herencia, ya que así extendemos sus funcionalidades creando objetos referenciando clases pero siendo del tipo de su superClase (abstracta o interface)


Hasta aquí la parte teórica, espero que sea de utilidad..................... y en la próxima entrada veremos un ejemplo simple de como aplicar este concepto mediante un ejemplo en Java!!!
Referencias.
Revista JavaWorld
SCJP Sun Certified Programmer for Java 6


También te podría Interesar. 

  • Interfaces en Java
  • Clases Abstractas.
  • Herencia en Java.
  • ¿ String Vrs StringBuffer Vrs StringBuilder ?
  • Comparando Fechas En Java
  • Tutorial Aplicaciones Web con Jboss Seam
¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo....

Volver a la Portada de Logo Paperblog