POO: Herencia

Herencia en Programación Orientada a Objetos

Herencia en Programación Orientada a Objetos

La herencia es uno de los pilares fundamentales de la Programación Orientada a Objetos (POO). Permite que una clase "hija" adquiera atributos y métodos de una clase "padre", facilitando la reutilización del código y mejorando su organización.

¿Qué es la Herencia en POO?

La herencia permite a una clase hija (o subclase) adquirir atributos y métodos de una clase padre (o superclase). Esto significa que la subclase puede utilizar y extender las funcionalidades de su superclase sin reescribir el código. Por ejemplo, una clase Vehículo podría ser la clase padre de Coche, que a su vez puede añadir propiedades adicionales como la velocidad.

Ventajas de la Herencia

  • Reutilización de Código: Los métodos y atributos definidos en una superclase pueden ser utilizados en todas sus subclases, evitando la duplicación de código.
  • Mantenimiento: Cambios en los métodos de la clase base se reflejan en todas las subclases, facilitando el mantenimiento.
  • Extensibilidad: Es posible añadir nuevas funcionalidades a la subclase sin modificar el código de la clase base, permitiendo la escalabilidad de las aplicaciones.

Tipos de Herencia

1. Herencia Simple

En la herencia simple, una clase hija hereda de una única clase padre. Esto es común en lenguajes como Java, donde cada clase puede tener solo una clase base.

// Clase padre
public class Animal {
    String nombre;

    public void hacerSonido() {
        System.out.println("El animal hace un sonido");
    }
}

// Clase hija
public class Perro extends Animal {
    public void hacerSonido() {
        System.out.println("El perro ladra");
    }
}
            

En este ejemplo, Perro hereda el atributo nombre y el método hacerSonido de Animal, y redefine el método hacerSonido para adaptarse a su propio comportamiento.

2. Herencia Múltiple

La herencia múltiple ocurre cuando una clase hereda atributos y métodos de más de una clase padre. En lenguajes como C++, esto es posible, pero en Java se evita utilizando interfaces.

// Herencia Múltiple en C++
class Vehiculo {
public:
    void encender() {
        cout << "Vehículo encendido" << endl;
    }
};

class NaveEspacial {
public:
    void despegar() {
        cout << "Nave espacial despegando" << endl;
    }
};

class CocheEspacial : public Vehiculo, public NaveEspacial {
public:
    void viajar() {
        cout << "Coche espacial en viaje" << endl;
    }
};
            

Herencia Múltiple en Java con Interfaces

Java no permite herencia múltiple de clases, pero se puede lograr algo similar con interfaces, permitiendo que una clase implemente varias interfaces y adopte funcionalidades de distintos tipos.

// Interfaces en Java
public interface Volador {
    void despegar();
}

public interface Acuatico {
    void navegar();
}

public class Anfibio implements Volador, Acuatico {
    public void despegar() {
        System.out.println("El anfibio despega como un avión.");
    }
    public void navegar() {
        System.out.println("El anfibio navega como un barco.");
    }
}
            

Resumen de tipos de herencia

Otros Conceptos Clave en Herencia

  • Polimorfismo: Permite tratar objetos de distintas subclases como si fueran de la clase padre.
  • Clases Abstractas: Las clases abstractas sirven como base y no son instanciables; contienen métodos abstractos que deben ser implementados por las subclases.
  • Sobreescritura de Métodos: Las subclases pueden sobrescribir métodos de la superclase para proporcionar implementaciones.

¡Gracias por leer!

Comentarios

Entradas populares