Interfaces

Las interrfaces son una forma de especificar qué debe hacer una clase sin especificar el cómo.
Las interfaces tienen una semejanza con las clases abastractas, en el sentido que no tiene sentido definir objetos instancia de una interfaz. Igual que las clases abstractas clase asociada se comprometa a implementar todos los métodos en ellas definidos, PERO en este caso la relacions no es de herencia en plenitud, dado que no hay atributos en la definición de una interfaz.

Las interfaces no son clases, sólo especifican requerimientos para la clase que las implementa o, desde su uso, los servicios para la función que manipula un objeto que se dice cumplir con la interfaz.

¿Cómo se usan las interfaces?
    Debemos crear una clase que implementa la interfaz. Implementarla  implementar cada uno de los métodos de la interfaz.
    Podemos definir métodos que usen como parámetro objetos que implementen la interfaz. Basta unar el nombre de la inteerfaz como el tipo del parámetro.
    Luego, las instancias de una clase que implemente la Interfaz, pueden tomar el lugar del argumento donde se espere alguine que implemente la interfaz.

Ejemplo: Supongamos que interfaz que describe a un nadador de cuatro estilos (nadaLibre(), nadaDespaldas(), nadaPecho(), nadaMariposa()). En ELO hay muchas instancias de Alumnos, entre ellos hay algunos que pueden ser instancias de AlumnosNadadores, clase que implementa la interfaz  Nadador. Con ello donde se necesite un nadador, podremos enviar esos alumnos. Cuando se pida un alumnos nadador en una función, se entiende que sólo se invocarán sus métodos como nadador.

Ejemplo Java

Sea al Interfaz Comparable.java
public interface Comparable
{
    int compareTo(Object otro);
}

Luego la clase Employee podría implementarla para comparar dos empleados.
La declaración de la clase empleado se modificaría a:
class Employee implements Comparable

La otro modificación es que la clase Employee debe implementar esta función. Por ejemplo:
public int compareTo(Object otroObject)
{
    Employee otro=(Employee) otroObject;
    if (salary < otro.salary) return -1;
    if (salary > otro.salary) return 1;
    return 0;
}

Ver ejemplo EmployeeSortTest.java.   Destacar invocación a  Array.sort()

Java sólo permite heredar de una clase, pero permite implementar múltiples interfaces.

Ver ejemplo TimerTest.java
Este ejemplo muestra las ideas básicas para el manejo de interfaces gráficas de Usuarios (GUIs)