Saltar al contenido principal

Herencia de interfaces

En Java, la herencia en interfaces les permite extenderse unas a otras para compartir métodos y facilitar la implementación en clases. Esto funciona de manera similar a la herencia de clases, pero con algunas diferencias importantes.

  • Uso de la palabra clave extends: Igual que en las clases, las interfaces pueden heredar de otras interfaces usando la palabra clave extends.
  • Métodos heredados: Cuando una interfaz hereda de otras interfaces, hereda todos los métodos (abstractos y por defecto) de las interfaces padre. La interfaz que extiende a otras interfaces no necesita implementar los métodos; eso le corresponderá a la clase que implemente la interfaz.
  • Herencia múltiple: Una interfaz puede extender varias interfaces al mismo tiempo, lo que permite que una única interfaz combine comportamientos de diferentes interfaces.

Veamos un ejemplo con interfaces para ver cómo funciona esta herencia:

public interface Vehiculo {
void arrancar();
void detener();
}
public interface Electricidad {
void cargarBateria();
}
// Interface que hereda de Vehiculo y Electricidad
public interface CocheElectrico extends Vehiculo, Electricidad {
void mostrarNivelBateria();
}

Aquí tenemos tres interfaces:

  • Vehiculo: Define métodos para arrancar y detener.
  • Electricidad: Define un método para cargar la batería.
  • CocheElectrico: Esta interfaz extiende las interfaces Vehiculo y Electricidad, por lo que hereda los métodos arrancar(), detener(), y cargarBateria(). Además, añade el método mostrarNivelBateria().

Ahora, una clase que implemente CocheElectrico deberá proporcionar una implementación para todos los métodos:

class Tesla implements CocheElectrico {
@Override
public void arrancar() {
System.out.println("El Tesla arranca.");
}

@Override
public void detener() {
System.out.println("El Tesla se detiene.");
}

@Override
public void cargarBateria() {
System.out.println("El Tesla está cargando la batería.");
}

@Override
public void mostrarNivelBateria() {
System.out.println("Nivel de batería: 80%.");
}
}