Ir al contenido principal

Polimorfismo

Prácticamente todos los objetos en Java (excepto aquellos tipo Object) tienen formas múltiples debido a que todas las clases en Java heredan de la clase Object. El polimorfismo recae particularmente en la relación IS-A (es-un) que existe entre 2 o más objetos, veamos un poco acerca de este tipo de relación.

La relación IS-A entre objetos::

En la programación orientada a objetos el concepto IS-A (es-un) está basado en la herencia de una clase o implementación de una interfaz. Es una manera de decir "esta cosa es un tipo de esta otra". P. ej., un Tsuru es un Carro y un carro a su vez es un Vehiculo. En Java la relación IS-A se expresa por medio de la palabra extends (cuando hablamos de clases) e implements (cuando hablamos de interfaces).

class Vehiculo{
//cosas de un vehiculo
}

class Carro extends Vehiculo{
//codigo de carro además de cosas
//heredadas del Vehiculo
}

class Tsuru extends Carro{
//cosas específicas de un Tsuru además de
//cosas heredadas de la clase Carro
}

En programación orientada a objetos podemos decir en base a lo anterior que:

- Vehiculo es la superclase de Carro
- Carro es una subclase de Vehiculo
- Carro es la superclase de Tsuru
- Tsuru es una subclase de Vehiculo
- Carro hereda de Vehiculo
- Tsuru hereda tanto de Vehiculo como de Carro
- Tsuru es un derivado de Carro
- Carro es un derivado de Vehiculo
- Tsuru es un derivado de Vehiculo
- Tsuru es un subtipo de Carro y Vehiculo

Regresando a la relación IS-A:

- "Carro extends Vehiculo" significa "Carro es un (IS-A) Vehiculo"
- "Tsuru extends Carro" significa "Tsuru es un (IS-A) Carro"

Si seguimos el árbol de herencia podemos deducir a su vez que "Tsuru es un (IS-A) Vehiculo". Ahora tenemos un solo objeto que tiene muchas formas, el Tsuru es un Tsuru(valga la redundancia), un Carro y un Vehiculo, además en Java es también un objeto tipo Object ya que toda clase hereda de la clase Object, a esto es lo que llamamos polimorfismo.

Polimorfismo::

Todo objeto que puede pasar más de una vez una prueba IS-A es considerado polimórfico, es decir, tiene muchas formas. Recordemos que la única manera de acceder a un objeto es a través de una variable de referencia, analicemos algunas características básicas de este tipo de variables:

+ Una variable de referencia solo puede ser de un tipo, una vez declarada, dicho tipo no puede cambiar pero sí el objeto hacia el cual refiere.
+ Una referencia es variable, por lo tanto, esta puede ser reasignada a otros objetos (a menos de que la variable sea marcada como final).
+ Una variable de referencia puede referir a cualquier objeto del mismo tipo declarado en la referencia o puede referir a cualquier subtipo del tipo declarado.
+ Una variable de referencia puede ser declarada de tipo clase o interfaz, si la variable es de tipo interfaz, puede referenciar a cualquier objeto que implemente dicha interfaz.

Un ejemplo basado en lo anterior:

class Vehiculo{
//Funcion predeterminada de un Vehiculo
}

class Carro extends Vehiculo{
//Funcion predeterminada de un Carro
//así como cosas heredadas de un Vehiculo
}

public class Tsuru extends Carro{

public Tsuru() {
}

public static void main(String[] args){
Vehiculo vh = new Carro();
Carro ct = new Tsuru();
Vehiculo vt = new Tsuru();

System.out.println(vh.toString());
System.out.println(ct.toString());
System.out.println(vt.toString());
}

}

Al ejecutar lo anterior obtendremos algo parecido a:

Carro@1d9dc39
Tsuru@93dcd
Tsuru@b89838

De igual manera sucede si implementamos el polimorfismo con interfaces:

interface Rodable{
//métodos de la interfaz Rodable
}

class Vehiculo{
//Funcion predeterminada de un Vehiculo
}

class Carro extends Vehiculo implements Rodable{
//Funcion predeterminada de un Carro
//así como cosas heredadas de un Vehiculo
}

public class Tsuru extends Carro{

public Tsuru() {
}

public static void main(String[] args){
Rodable rd1 = new Carro();
Rodable rd2 = new Tsuru();

System.out.println(rd1.toString());
System.out.println(rd2.toString());

}

}

Al ejecutar lo anterior obtenemos algo así:

Carro@93dcd
Tsuru@b89838

En el ejemplo anterior no podemos utilizar una referencia a un objeto tipo Vehiculo para una variable de tipo Rodable ya que Vehiculo no implementa dicha interfaz, si lo hacemos obtendremos un error indicando que existen tipos incompatibles en el código.

Es todo lo que veremos sobre polimorfismo. ¿Alguna duda? deja tu comentario.

Más sobre programación en Java aquí.

Comentarios

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.