Java 8 a ajouté une méthode par défaut, qui peut ajouter de nouvelles fonctionnalités fonctionnelles à l'interface sans affecter la classe d'implémentation de l'interface. Illustrons cela avec des exemples ci-dessous.
La copie de code est la suivante:
classe publique MyClass implémente interfacea {
public static void main (String [] args) {
}
@Outrepasser
public void didSomething () {
// Talage de méthode générée automatiquement de TODO
}
}
Interface interface interfacea {
public Void ditSomething ();
}
Le code ci-dessus montre que la classe MyClass implémente la méthode SAIDOMEthing () de l'interface InterfacesA. Maintenant, nous ajoutons une nouvelle méthode SayHi () à l'interface InterfacesA. Si cela est fait, la classe MyClass ne peut être compilée que si nous fournissons la méthode d'implémentation de SayHi ().
La méthode par défaut est très utile. Par exemple:
La copie de code est la suivante:
classe publique MyClass implémente interfacea {
public static void main (String [] args) {
}
@Outrepasser
public void didSomething () {
// Talage de méthode générée automatiquement de TODO
}
}
Interface interface interfacea {
public Void ditSomething ();
Par défaut public void sayshi () {
System.out.println ("HI");
}
}
Notez que nous devons fournir des implémentations de toutes les méthodes par défaut. Par conséquent, la méthode par défaut rend notre code plus flexible et peut également écrire des méthodes pour les implémenter dans l'interface. La méthode implémentée sera implémentée comme la méthode par défaut.
Alors, que dois-je faire s'il y a un conflit dans plusieurs interfaces?
Étant donné que les classes Java peuvent implémenter plusieurs interfaces, il peut y avoir une situation où deux interfaces ou plus ont une méthode d'interface par défaut avec le même nom, provoquant des conflits. Étant donné que la machine virtuelle Java est en cours d'exécution lorsque le programme est en cours d'exécution, il n'est pas clair quelle méthode par défaut que vous souhaitez utiliser. Cela entraînera une erreur de compilation.
Jetons un coup d'œil à l'exemple suivant.
La copie de code est la suivante:
classe publique MyClass implémente interfacea, interfaceB {
public static void main (String [] args) {
MyClass mc = new myClass ();
MC.Sayhi ();
}
@Outrepasser
public void didSomething () {
// Talage de méthode générée automatiquement de TODO
}
}
Interface interface interfacea {
public Void ditSomething ();
Par défaut public void sayshi () {
System.out.println ("Hi from Interfacea");
}
}
interface interface interfaceB {
Par défaut public void sayshi () {
System.out.println ("Hi from InterfaceB");
}
}
Il ne peut pas passer la compilation et rapportera l'erreur suivante:
«Les méthodes par défaut en double nommées SayHi avec les paramètres () et () sont héritées des types InterfaceB et Interfacea.»
À moins que la méthode Sayhi () ne soit remplacée dans la classe MyClass:
La copie de code est la suivante:
classe publique MyClass implémente interfacea, interfaceB {
public static void main (String [] args) {
MyClass mc = new myClass ();
MC.Sayhi ();
}
@Outrepasser
public void didSomething () {
// Talage de méthode générée automatiquement de TODO
}
@Outrepasser
public void sayshi () {
System.out.println ("Implémentation de SayHi () dans MyClass");
}
}
interface interface interfacea {
public Void ditSomething ();
Par défaut public void sayshi () {
System.out.println ("Hi from Interfacea");
}
}
interface interface interfaceB {
Par défaut public void sayshi () {
System.out.println ("Hi from InterfaceB");
}
}
Si vous souhaitez spécifier la méthode SayHi () de l'interface à appeler, nous pouvons le faire:
La copie de code est la suivante:
classe publique MyClass implémente interfacea, interfaceB {
public static void main (String [] args) {
MyClass mc = new myClass ();
MC.Sayhi ();
}
@Outrepasser
public void didSomething () {
// Talage de méthode générée automatiquement de TODO
}
@Outrepasser
public void sayshi () {
Interfacea.super.sayhi ();
}
}
Interface interface interfacea {
public Void ditSomething ();
Par défaut public void sayshi () {
System.out.println ("Hi from Interfacea");
}
}
interface interface interfaceB {
Par défaut public void sayshi () {
System.out.println ("Hi from InterfaceB");
}
}
La réponse est-elle très simple?