
¡Hola! Hoy vamos a explorar dos conceptos fundamentales en la programación orientada a objetos (POO) en Java: la herencia y el polimorfismo. No te preocupes si suenan complicados, ¡los haremos fáciles de entender!
Herencia: Compartiendo Características
Imagina que tienes una receta de galletas de chocolate. Esta receta es tu clase "padre". Ahora, quieres hacer galletas de chocolate con nueces. En lugar de escribir una receta completamente nueva, puedes usar la receta base (galletas de chocolate) y simplemente añadir nueces. Eso es la herencia en esencia.
En Java, la herencia permite que una clase (la clase "hija" o "subclase") herede propiedades y métodos de otra clase (la clase "padre" o "superclase"). La clase hija extiende la funcionalidad de la clase padre, agregando sus propias características específicas. Esto evita la repetición de código y promueve la reutilización.
Must Read
Pensemos en animales. Tenemos una clase padre llamada "Animal". Esta clase puede tener propiedades como "tiene nombre", "tiene edad" y métodos como "comer" y "dormir". Ahora, podemos crear clases hijas como "Perro" y "Gato". Estas clases heredarán las propiedades y métodos de "Animal", pero también tendrán sus propias propiedades y métodos específicos, como "ladrar" (para Perro) o "maullar" (para Gato).
Aquí hay un ejemplo simple en Java:

class Animal {
String nombre;
int edad;
void comer() {
System.out.println("El animal está comiendo.");
}
}
class Perro extends Animal {
void ladrar() {
System.out.println("¡Guau!");
}
}
En este código, la clase Perro extiende la clase Animal, lo que significa que hereda su propiedad nombre, su propiedad edad y su método comer(). Además, la clase Perro tiene su propio método ladrar().
Polimorfismo: Muchas Formas
Polimorfismo significa "muchas formas". En la programación, se refiere a la capacidad de un objeto de tomar muchas formas. Piénsalo así: una lámpara puede conectarse a diferentes tomas de corriente. La lámpara es el objeto, y las tomas son las diferentes formas en que puede interactuar con el mundo.
En Java, el polimorfismo se logra a través de la herencia y la implementación de interfaces. Significa que un objeto puede ser tratado como una instancia de su propia clase, o como una instancia de su clase padre. Esto permite escribir código más flexible y general.

Volviendo al ejemplo de los animales, imagina que tienes una lista de animales. Esta lista puede contener perros, gatos, pájaros, etc. Puedes iterar sobre esta lista y llamar al método comer() en cada animal. Aunque cada animal come de manera diferente, el método comer() se adapta al tipo de animal específico. Esto es polimorfismo en acción.
Hay dos tipos principales de polimorfismo:

- Polimorfismo en tiempo de compilación (Sobrecarga de métodos): Se decide qué método se va a llamar en tiempo de compilación. Esto ocurre cuando tienes múltiples métodos con el mismo nombre pero diferentes parámetros.
- Polimorfismo en tiempo de ejecución (Anulación de métodos): Se decide qué método se va a llamar en tiempo de ejecución. Esto ocurre cuando una clase hija redefine un método de su clase padre.
Ejemplo de polimorfismo en tiempo de ejecución:
class Animal {
void hacerSonido() {
System.out.println("El animal hace un sonido genérico.");
}
}
class Perro extends Animal {
@Override
void hacerSonido() {
System.out.println("¡Guau!");
}
}
class Gato extends Animal {
@Override
void hacerSonido() {
System.out.println("¡Miau!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Perro();
Animal animal3 = new Gato();
animal1.hacerSonido(); // Imprime "El animal hace un sonido genérico."
animal2.hacerSonido(); // Imprime "¡Guau!"
animal3.hacerSonido(); // Imprime "¡Miau!"
}
}
Observa que aunque todas las variables son de tipo Animal, el método hacerSonido() se comporta de manera diferente según el tipo de objeto real. La palabra clave @Override indica que estamos anulando el método de la clase padre.
La herencia y el polimorfismo son herramientas poderosas que te permiten escribir código más organizado, reutilizable y flexible. ¡Sigue practicando y pronto dominarás estos conceptos!