// 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()).
*/