Definición de las interfaces
Una interface se comporta de forma similar a una clase, de hecho Java la trata así generando un archivo de Bytecode separado por cada una, además de forma similar a una clase abstracta las Interfaces no pueden ser instanciadas, esto nos deja entonces como opción tener que implementar las mismas a través de otras clases que re-definan sus métodos abstractos.
Para crear una interface debemos seguir la siguiente estructura:
modificador interface InterfaceNombre { /**Declaraciones de constantes Declaraciones de métodos Abstractos */ }
Vemos entonces que debemos iniciar indicando el modificador, este puede ser: public, protected, private, luego seguimos con la palabra clave interface, de esta forma ya Java puede saber que no se trata de una clase y finalmente el nombre de la misma, ya dentro de la misma podremos definir las constantes y los métodos abstractos. Veamos en la siguiente imagen un código de una interface ya definida.
Hemos creado entonces una interface pública que se llama comestible y nos permite añadir un comportamiento a nuestras clases, al definir un método abstracto formaComer(), podemos entonces definir la manera en que se pueden comer los objetos de las clases que implementen esta interface.
Implementación de las interfaces en las clases
Hemos mencionado varias veces la palabra implementar cuando hablamos de hacer trabajar una interface en una clase, esto es porque la palabra reservada con la que unimos la interface con la clase es implements es por ello que definimos este concepto de esta manera.
En el siguiente ejemplo vamos a ver una implementación de la interface que creamos en el ejemplo anterior:
Vemos que hemos creado una clase llamada Pollo que hereda de una clase abstracta Animal y que también implementa nuestra interface Comestible, al hacer esto nos vemos obligados a reescribir el método abstracto de la misma para que nuestra clase pueda funcionar.
Con esto finalizamos este tutorial, como vemos las interfaces son otro recurso que nos ayudará a darle mayor profundidad a los conceptos que podamos incorporar en nuestras aplicaciones hechas en Java.