mika-el
3/16/2018 - 8:23 AM

Interfaces

// Declaration
public interface I {
  public void A();
}

// Interface extend
public interface J extends I {
  public String B();
}

// Class X need to redefine interface I & J methods
public class X implements J {
  public void A(){
    //…
  } 
  public String B(){
    //…
  }
}

/*
 * Interface has no state, Any variables in Interfaces are really constants.
 */
 
/*
 * Since Java 8 Interfaces can have static methods.
 * Interface static methods "HAVE" to be redefined in any class that implement inteface.
 */
 	public static void description() {
		System.out.println("Méthode statique dans une interface");
	}
 
 /*
  * Since Java 8 Interfaces can have default methods.
  * Interface static methods "CAN" to be redefined in any class that implement inteface.
  */
 	default void test() {
		System.out.println("Je suis un test !");
	}
 
 
 /*
  * En gros pour Java 8:
  *
  * public void A(); 
  * - Toute les classes qui implemente l'interface ou les interface filles devront redefinir A;
  * 
  * public static void A() {} 
  * - Les classes qui implemente l'interface ne pourront pas redefinir A.
  * - Les interfaces qui implemente interface A pourront redefinir A et pourront etre appelé statiquement depuis celle-ci.
  * - Les interfaces qui implemente interface A pourront appeler la methode de l'inteface mère (NomInterfaceMere.A()).
  * - Les classes pouront appeler la methode de l'interface mère et fille de façon statique.
  * 
  * default void A() {}
  * - Les classes qui implementes l'interface ne seront pas obligé de redefinire la méthode.
  * - Les classes concrètes qui implémente l'interface pourront appeler la methode de l'interface avec "this".
  * - Les classes concrètes qui étendes une classe qui implémente l'interface pourront appeler la methode de l'interface depuis l'instance.
  * - Les interfaces filles direct qui etendes l'interface auront accès à la methode mère A (NomInterfaceMere.super.A()).
  * - La methode A pourras etre appelé depuis les classes seulement si celles-ci implemente l'interface (NomInterface.super.A()).
  */