1.4 Usos de Interfaces - ajpaez/OCA GitHub Wiki

(OCA Objective 7.6)

#Declarando una interfaz Una interfaz define un contrato sobre lo que tiene que hacer una clase, sin indicar nada acerca de como lo hará la clase. Una interfaz puede ser implementada por cualquier clase desde cualquier árbol de herencia. Esto permite tomar diferentes clases y darle una característica común. Una interfaz es una clase 100% abstracta ,es decir no puede tener metodos no abstractos.

Lo que se declara:

interface Bounceable{
void bounce( );
void setBounceFactor(int bf);
}

Lo que el compilador ve:

interface Bounceable {
public abstract void bounce( );
public abstract void setBounceFactor(int bf);
}

Lo que una clase que implemente una interfaz debe tener:

Class Tire implements Bounceable{
public void bounce( ){...}
public void setBounceFactor(int bf){ }
}

Reglas a la hora de declarar una interfaz:

  • Todos los métodos de una interfaz son de forma implícita public and abstract.
  • Todas las variables definidas en una interfaz deben ser public, static y final, por tanto no son variables, son constantes.
  • Los métodos de una interfaz no deben ser static.
  • Puesto que los métodos de una interfaz son públicos y abstractos, no pueden ser marcados como final, strictfo o native.
  • Una interfaz puede extender una o mas interfaces.
  • Una interfaz solo pueden extender otras interfaces.
  • Una interfaz no puede implementar ninguna interfaz o clase.
  • Una interfaz debe ser declarada con la keywords interface.
  • Los tipos interfaz puedes ser usados polimorficamente.

Declaración de una interfaz:

public abstract interface Rollable{} public interface Rollable {}

Declaración de métodos dentro de una interfaz:

public interface Bounceable {
    public abstract void bounce();
    public abstract void setBounceFactor(int bf);
}

Los modificadores public y abstrac son redundantes.

RECUERDA: TODOS LOS MÉTODOS DE UNA INTERFAZ SON PÚBLICOS Y ABSTRACTOS

Las siguientes declaraciones de métodos no compilan:

final void bounce(); // final and abstract can never be used together, and abstract is implied static void bounce(); // interfaces define instance methods private void bounce(); // interface methods are always public protected void bounce(); // (same as above)

#Declarando constantes de interfaz Las constantes de una interfaz son de forma implícita public static final. Al colocar una constante en una interfaz cualquier clase que implemente la interfaz tiene acceso directo a la constante.

Declaraciones legales de constantes en interfaces

  • public int x = 1; // Looks non-static and non-final, but isn't!
  • int x = 1; // Looks default, non-final, non-static, but isn't!
  • static int x = 1; // Doesn't show final or public
  • final int x = 1; // Doesn't show static or public
  • public static int x = 1; // Doesn't show final
  • public final int x = 1; // Doesn't show static
  • static final int x = 1 // Doesn't show public
  • public static final int x = 1; // what you get implicitly