Polimorfismo
El polimorfismo en Java es la capacidad de un objeto de una clase derivada para ser tratado como un objeto de una clase base. Esto significa que una variable de una clase base puede almacenar una referencia a un objeto de una clase derivada.
Por ejemplo, supongamos que tenemos una clase base llamada Shape y dos clases derivadas llamadas Circle y Rectangle:
class Shape {
void draw() {
System.out.println("Drawing a shape");
}
}
class Circle extends Shape {
void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle extends Shape {
void draw() {
System.out.println("Drawing a rectangle");
}
}
Ahora, podemos crear una variable de tipo Shape y asignarle una referencia a un objeto de la clase Circle o Rectangle:
Shape s1 = new Circle();
s1.draw(); // imprime "Drawing a circle"
Shape s2 = new Rectangle();
s2.draw(); // imprime "Drawing a rectangle"
En este ejemplo, la variable s1 es de tipo Shape, pero almacena una referencia a un objeto de la clase Circle. Al llamar al método draw() en s1, se ejecuta el método sobreescrito de la clase Circle. Lo mismo ocurre con la variable s2 de tipo Shape pero almacena una referencia a un objeto de la clase Rectangle.
En resumen, el polimorfismo en Java permite tratar un objeto de una clase derivada como si fuera un objeto de una clase base, lo cual nos permite crear métodos y estructuras de datos más genéricas y reutilizables.
Aquí tienes un ejemplo de polimorfismo en Java:
Supongamos que tienes una aplicación de gestión de recursos humanos para una empresa y necesitas representar diferentes tipos de empleados, como empleados a tiempo completo y empleados a medio tiempo. Ambos tipos de empleados comparten algunas características comunes, como el nombre y el número de identificación, pero tienen métodos y atributos específicos. Aquí hay una implementación simplificada de cómo podrías usar el polimorfismo en este escenario:
// Clase base abstracta Empleado
public abstract class Empleado {
private String nombre;
private int id;
public Empleado(String nombre, int id) {
this.nombre = nombre;
this.id = id;
}
public abstract void calcularSalario(); // Método abstracto
public String getNombre() {
return nombre;
}
}
// Clase EmpleadoTiempoCompleto que hereda de Empleado
public class EmpleadoTiempoCompleto extends Empleado {
private double salarioAnual;
public EmpleadoTiempoCompleto(String nombre, int id, double salarioAnual) {
super(nombre, id);
this.salarioAnual = salarioAnual;
}
@Override
public void calcularSalario() {
System.out.println("Calculando salario de empleado a tiempo completo: " + salarioAnual);
}
}
// Clase EmpleadoMedioTiempo que hereda de Empleado
public class EmpleadoMedioTiempo extends Empleado {
private double salarioPorHora;
private int horasTrabajadas;
public EmpleadoMedioTiempo(String nombre, int id, double salarioPorHora, int horasTrabajadas) {
super(nombre, id);
this.salarioPorHora = salarioPorHora;
this.horasTrabajadas = horasTrabajadas;
}
@Override
public void calcularSalario() {
System.out.println("Calculando salario de empleado a medio tiempo: " + (salarioPorHora * horasTrabajadas));
}
}
public class Main {
public static void main(String[] args) {
Empleado empleado1 = new EmpleadoTiempoCompleto("Juan", 101, 60000.0);
Empleado empleado2 = new EmpleadoMedioTiempo("Ana", 102, 12.0, 20);
empleado1.calcularSalario();
empleado2.calcularSalario();
}
}
En este ejemplo, hemos utilizado la herencia y el polimorfismo para representar diferentes tipos de empleados y calcular sus salarios de manera específica para cada tipo. El método calcularSalario()
se implementa de forma diferente en las clases derivadas. Cuando llamamos a este método en las instancias de las clases derivadas, se ejecuta la implementación específica de cada tipo de empleado. Esto es un ejemplo de polimorfismo en Java en un contexto empresarial.
https://www.tutorialspoint.com/java/java_polymorphism.htm