Ejercicios De Polimorfismo En Java Resueltos

Polimorfismo, en Java, significa "muchas formas". En programación, se refiere a la capacidad de un objeto de tomar muchas formas.
¿Qué es el Polimorfismo?
Imagina tener un control remoto que puede operar diferentes dispositivos: un televisor, un reproductor de DVD y un equipo de sonido. El mismo botón de "encendido" funciona de manera diferente para cada dispositivo. Eso es polimorfismo.
En Java, el polimorfismo se logra a través de herencia e interfaces. Permite tratar objetos de diferentes clases de manera uniforme.
Must Read
Tipos de Polimorfismo
Existen principalmente dos tipos:
- Polimorfismo en tiempo de compilación (estático o sobrecarga): Ocurre cuando tenemos múltiples métodos con el mismo nombre pero diferentes parámetros dentro de la misma clase. El compilador decide qué método ejecutar basándose en los argumentos que se le pasan.
- Polimorfismo en tiempo de ejecución (dinámico o sobreescritura): Se basa en la herencia. Una subclase puede sobreescribir un método heredado de su superclase. La JVM (Java Virtual Machine) determina qué método ejecutar en tiempo de ejecución basándose en el tipo real del objeto.
Ejemplos Prácticos
Sobrecarga (Compilación):

Considera una clase llamada Calculadora:
class Calculadora {
int sumar(int a, int b) { return a + b; }
double sumar(double a, double b) { return a + b; }
}
Calculadora calc = new Calculadora();
int resultadoInt = calc.sumar(5, 10); // Llama al primer método sumar
double resultadoDouble = calc.sumar(5.5, 10.2); // Llama al segundo método sumar
Aquí, el método sumar está sobrecargado. El compilador elige la versión correcta según los tipos de datos.

Sobreescritura (Ejecución):
Imagina una clase Animal con un método emitirSonido():

class Animal {
void emitirSonido() { System.out.println("Sonido genérico"); }
}
class Perro extends Animal {
@Override
void emitirSonido() { System.out.println("Guau!"); }
}
class Gato extends Animal {
@Override
void emitirSonido() { System.out.println("Miau!"); }
}
Animal animal1 = new Animal();
Animal animal2 = new Perro();
Animal animal3 = new Gato();
animal1.emitirSonido(); // Imprime "Sonido genérico"
animal2.emitirSonido(); // Imprime "Guau!"
animal3.emitirSonido(); // Imprime "Miau!"
Aquí, Perro y Gato sobreescriben el método emitirSonido() de la clase Animal. Aunque todos son referenciados como Animal, cada uno emite su propio sonido específico gracias al polimorfismo en tiempo de ejecución.
Beneficios del Polimorfismo
- Flexibilidad: Permite agregar nuevas clases y comportamientos sin modificar el código existente.
- Reutilización de código: Facilita la creación de código más genérico y reutilizable.
- Mantenimiento: Simplifica el mantenimiento del código al reducir la duplicación.
En resumen, el polimorfismo es un concepto poderoso en Java que permite crear código más flexible, reusable y mantenible.
