Interface
Une interface est un moyen abstrait de définir ce qui devrait être dans une classe, on créer une interface avec des méthodes et si on veut créer une classe basée sur cette interface, on doit l'implémenter avec implements et utiliser un décorateur pour signifier que l'on créer une methode de l'implementation que l'on va écraser
Le but est de mettre des fonctions communes dans une interface pour pouvoir les appeler depuis l'interface, comme une superclasse
interface Interface{
public String InterfaceMethod();
}
public class Main implements Interface{
public static void main(String[] args){
}
@Override
public String InterfaceMethod() {
return " ";
}
}
Certaines méthodes peuvent prendre des arguments en paramètres, il faut alors l'indiquer dans l'interface, cela peut aussi être des constantes et des variables propres à la classe
interface Interface{
public String InterfaceMethod();
public String returnString(String message);
}
public class Main implements Interface{
public static void main(String[] args){
}
@Override
public String InterfaceMethod() {
return " ";
}
@Override
public String returnString(String message) {
return null;
}
}
Dans cet exemple, pour accéder à la méthode InterfaceMethod on doit créer une instance de Main
String result = new Main().InterfaceMethod();
On peut définir des constantes et des paramètres dans une interface qui peuvent être accedée depuis celle ci
interface Interface{
public String InterfaceMethod();
public String returnString(String message);
int constant = 0; // Use Interface.constant to access 0
}
Afin d'éviter de devoir à chaque implémentation rajouter des méthodes qui ne change pas de l'interface, on peut utiliser la signature default
interface Interface {
default String defaultMethod() {
return "default";
}
}
public class Main implements Interface {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.defaultMethod()); // Output: "default"
}
}
On peut bien sur l'écraser et changer le corp de la méthode
interface Interface {
default String defaultMethod() {
return "default";
}
}
public class Main implements Interface {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.defaultMethod()); // Output: "overrided"
}
@Override
public String defaultMethod(){
return "overrided";
}
}
Si dans la construction d'une interface on utilise une méthode static, cette méthode n'est pas accessible depuis l'implémentation mais depuis l'interface
interface Interface{
public static String returnString(String message){
return message;
}
}
public class Main implements Interface{
public static void main(String[] args){}
}
class Test{
public static void main(String[] args){
//==========================================
// Main.returnString(" "); returns an error
//==========================================
Interface.returnString(" ");
}
}
On peut également implémenter plusieurs interfaces en même temps, ce qui nous force à ajouter plusieurs méthodes
interface Interface{
public String InterfaceMethod();
}
interface Interface2{
public String InterfaceMethod2();
}
public class Main implements Interface, Interface2{
public static void main(String[] args){}
@Override
public String InterfaceMethod() {return " ";}
@Override
public String InterfaceMethod2() {return null;}
}