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
- Para crear una interface, usamos la palabra
interface
. - Para indicar que una clase emplea (implementa) una interface, usamos la palabra
implements
. - Una clase puede implementar varias interfaces (herencia múltiple).
- La interface puede definirse public o sin modificador de acceso/visibilidad, y tiene el mismo significado que para las clases.
- Todos los métodos que define una interface son
public
yabstract
aunque no se indique explícitamente. - Todas las variables que define una interface son
public static final
aunque no se indique explícitamente. - Una clase que implementa una interface está obligada a implementar todos sus métodos.
[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