Usando interface en vez de class se define una interfaz a una clase sin especificar el código de los métodos.
Una interfaz no es nada más que una especificación cómo algo debe ser implementado para que se pueda usar en otro código.
Una interfaz no puede tener declaraciones de objetos que no son ni constantes ( final) ni estáticos ( static). En otras palabras, todas las declaraciones de objetos automáticamente son finales y estáticos, aún no se ha escrito explícitamente.
Igual como clases, interfaces pueden incorporar otras clases o interfaces. También se pueden extender interfaces. Nota que es posible extender una interfaz a base de más de una interfaz:
Todos los métodos de una interfaz son implícitamente públicos y abstractos, aún no se ha escrito ni public ni abstract explícitamente (y eso es la convención).
Los demás modificadores no están permitidos para métodos en interfaces.
Para generar un programa todas las interfaces usadas tienen que tener sus clases que las implementan.
Una clase puede implementar varias interfaces al mismo tiempo (aún una clase puede extender como mucho una clase). Se identifican las interfaces implementadas con implements después de una posible extensión ( extends) de la clase.
Ejemplo:
public interface Comparable {
int compareTo(Object o);
}
class Something extends Anything implements Comparable {
...
public int compareTo(Object o) {
// cast to get a correct object
// may throw exception ClassCastException
Something s = (Something)o;
... // code to compare to somethings
}
Interfaces se comportan como clases totalmente abstractas, es decir, que no tienen ni miembros no-estáticos, nada diferente a público, y ningún código no-estático.