Definir una interfaz es muy parecido a definir una clase abstracta:
/* se usa la palabra reservada "interface" */
public interface InterfazDeJava{
}
Cuando define una interfaz se crea una referencia similar a una clase con la principal diferencia en que no define ninguna implementación de sus métodos. Además, presenta las siguientes características o restricciones.
- Una interfaz no puede ser instanciada, por lo que no se define un constructor.
- Los únicos campos permitidos en una definición de interfaz son constantes que se declaran tanto estáticas como finales.
- Una interfaz define una API pública. Todos los métodos de una interfaz son implícitamente públicos, incluso si se omite el modificador público. Es un error definir un método protegido o privado en una interfaz.
- Una interfaz no contiene implementación alguna. Todos los métodos de una interfaz son implícitamente abstractos, incluso si se omite el modificador abstracto.
- Las interfaces pueden heredar de otras interfaces y pueden soportar herencia múltiple.
- Son las clases que al implementar una interfaz mediante la palabra reservada "implements" implementan el código de los métodos declarados en una interfaz.
- Una interfaz puede ser implementada en múltiples clases y una clase puede implementar múltiples interfaces.
Ejemplo de interfaz y su implementación en código
Código de la interfaz: public interface Calculadora {
Float sumar(Float a, Float b);
Float restar(Float a, Float b);
Float multiplicar(Float a, Float b);
Float dividir(Float a, Float b);
String getMensaje();
}
Código de la clase:
public class CalculadoraDecimal implements Calculadora {
private String mensaje;
public CalculadoraDecimal() {
}
@Override
public Float sumar(Float a, Float b) {
mensaje = null;
return a + b;
}
@Override
public Float restar(Float a, Float b) {
mensaje = null;
return a + b;
}
@Override
public Float multiplicar(Float a, Float b) {
mensaje = null;
return a + b;
}
@Override
public Float dividir(Float a, Float b) {
if (b == 0) {
mensaje = "No se puede dividir entre cero";
return null;
} else {
mensaje = null;
return a / b;
}
}
@Override
public String getMensaje() {
return mensaje;
}
}
Herencia en interfaces
Como se ha mencionado, las interfaces pueden heredar de otras interfaces sus métodos y constantes. Aquí las superinterfaces (similar a las superclases) deben colocarse luego de la palabra reservada "extends"Herencia simple:
/* se usa la palabra reservada "extends " */
public interface InterfazHija extends InterfazPadre{
}
Herencia múltiple:
/* se usa la palabra reservada "extends " */
public interface InterfazHija extends InterfazPadre1, InterfazPadre2{
}
Fuentes:
- Flanagan, D. (2002). JAVA IN A NUTSHELL Desktop Quick Reference (4a ed.). England: Pearson Education.