Programación Orientada a Objetos: Polimorfismo
Este Post es la quinta parte de la serie “Programación Orientada a Objetos”. Esta serie tiene como objetivo establecer los fundamentos de la POO, utilizando Java como ejemplo. Los temas de esta serie son los siguientes:
- Definición de POO
- Clases y Objetos
- Herencia
- Abstracción
- Encapsulamiento
- Polimorfismo
- Composición
- Principios utilizados en la POO
Todo el código de la serie está disponible en GitHub.
El código correspondiente a esta quinta parte lo pueden encontrar aquí.
Todos los ejemplos están hechos en Netbeans.
El polimorfismo es otro de los conceptos básicos de la POO. Polimorfismo se define como la habilidad de un objeto de tener varias formas.
Esto se puede lograr cuando una clase hereda de otra o implementa una interfaz. Para ver esto en acción, vamos a utilizar la palabra reservada instanceof, que nos indica si un objeto es instancia de una clase en particular.
Tenemos una clase Persona que no hereda ni implementa nada:
public class Persona {
protected String nombre;
protected int edad;
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
}
También tenemos una interfaz IPersona:
public interface IPersona {
void decirMiNombre();
}
Y por último, tenemos una clase Alumno, que hereda de Persona e implementa IPersona:
public class Alumno extends Persona implements IPersona {
public Alumno(String nombre, int edad) {
super(nombre, edad);
}
@Override
public void decirMiNombre() {
System.out.println("Mi nombre es " + nombre);
}
}
Podemos ver que la clase Persona solamente es del tipo Persona. Pero la clase Alumno es del tipo Alumno, Persona e IPersona. Utilizando instanceof podemos comprobar esto:
Persona persona = new Persona("Jorge", 33);
Alumno alumno = new Alumno("Ricardo", 33);
if (persona instanceof Persona) {
System.out.println("persona es del tipo Persona");
} else {
System.out.println("persona NO es del tipo Persona");
}
if (persona instanceof IPersona) {
System.out.println("persona es del tipo IPersona");
} else {
System.out.println("persona NO es del tipo IPersona");
}
if (persona instanceof Alumno) {
System.out.println("persona es del tipo Alumno");
} else {
System.out.println("persona NO es del tipo Alumno");
}
if (persona instanceof Object) {
System.out.println("persona es del tipo Object");
} else {
System.out.println("persona NO es del tipo Object");
}
System.out.println("================= ALUMNO =================");
if (alumno instanceof Persona) {
System.out.println("alumno es del tipo Persona");
} else {
System.out.println("alumno NO es del tipo Persona");
}
if (alumno instanceof IPersona) {
System.out.println("alumno es del tipo IPersona");
} else {
System.out.println("alumno NO es del tipo IPersona");
}
if (alumno instanceof Alumno) {
System.out.println("alumno es del tipo Alumno");
} else {
System.out.println("alumno NO es del tipo Alumno");
}
if (alumno instanceof Object) {
System.out.println("alumno es del tipo Object");
} else {
System.out.println("alumno NO es del tipo Object");
}
Al ejecutar, obtenemos esta salida:
persona es del tipo Persona
persona NO es del tipo IPersona
persona NO es del tipo Alumno
persona es del tipo Object
================= ALUMNO =================
alumno es del tipo Persona
alumno es del tipo IPersona
alumno es del tipo Alumno
alumno es del tipo Object
También podemos observar que todos los objetos creados en Java son del tipo Object, por default.
En nuestra sección de Abstracción, pudimos ver el polimorfismo en acción y algunas de las ventajas que nos puede traer.
Deja un comentario