Tabla de Contenidos

Herencia: Interfaces

El concepto de interface lleva más lejos la idea de clase abstracta. Se conoce a las interfaces como clases abstractas puras, ya que todos sus métodos son abstractos, y tampoco permiten ser instanciadas.

Es decir, en una interface, no existe ninguna implementación de métodos, solo su declaración o definición.

Las interfaces sirven para establecer la forma de una clase, diseñando qué métodos deben tener, parámetros de esos métodos y valores de retorno, pero sin definir su funcionamiento.

Una interface también puede tener atributos, pero siempre serán static final.

Otra de sus finalidades es permitir una herencia múltiple para una clase, ya que mediante el mecanismo de herencia simple (extends) solo se puede tener una superclase.

Declaración de interfaces

[Modificadores] interface nombre_interface {
  //cuerpo de la interface (declaración de métodos o atributos)
}
 
//Declaración de interface VehiculoAereo
public interface VehiculoAereo{
   void despegar(float alturaBase);
   void aterrizar();
}

La interface VehiculoAereo se aplica a cualquier clase que quiera ser Vehiculo Aereo. Para poder ser un vehiculo aereo está obligada a tener los métodos despegar() y aterrizar().

He creado la clase Globo que hereda de la clase Vehiculo, y quiero que implemente la interface VehiculoAereo:

public class Globo extends Vehiculo implements VehiculoAereo{
   private int volumenGlobo;
   private int capacidadPasajeros;
   ... 
   //Constructores, getters, setters
 
   //Estoy obligado a implementar
   @Override
   void despegar(float alturaBase){ 
      if(alturaBase > 500){
         aumentarCombustible();
         ...
      }
   }
 
   //Estoy obligado a implementar
   @Override
   void aterrizar(){ 
      reducirVelocidadVertical();
      ...
   }
 
   //Métodos propios de la clase
   void aumentarCombustible(){
 
      //implementación método
   }
 
   void reducirVelocidadVertical(){
      //implementación método
   }
}

Variables de referencia de interfaces

Es posible crear variables de referencia de tipo interface, pero no puedo de ningún modo crear objetos de tipo interface: no permiten ser instanciadas.

//Interface List de Java
List<String> lista1 = new ArrayList<String>();
List<String> lista2 = new Stack<String>();
 
//Interface VehiculoAereo
VehiculoAereo vehiculo1 = new Globo();
VehiculoAereo vehiculo2 = new Avion();

Además permiten un polimorfismo múltiple dado que una clase puede implementar múltiples interfaces:

Cuando una clase implementa una interface, está obligada a implementar todos los métodos definidos en esa interface, y si implementa varias interfaces, ocurre lo mismo:

VehiculoAereo vehiculo1 = new Globo();
VehiculoAereo vehiculo2 = new Avion();
 
VehiculoConMotor vehiculo3 = new Globo();
VehiculoConMotor vehiculo4 = new Avion();

Herencia de interfaces

Una interface también permite heredar de otra interface, solo de una, mediante el mecanismo de la herencia simple:

public interface nombre_interface extends nombre_interface{
 
tipo_retorno nombre_metodo(lista_argumentos ) ;
. . .
}

© 2024 Fernando Valdeón