La méthode par défaut de l'interface Java8
Quelle est la méthode par défaut et pourquoi il existe une méthode par défaut?
Autrement dit, l'interface peut avoir des méthodes d'implémentation, et il n'est pas nécessaire d'implémenter la classe pour implémenter ses méthodes. Ajoutez simplement le mot-clé par défaut avant le nom de la méthode.
Pourquoi avez-vous besoin de cette fonctionnalité? Tout d'abord, l'interface précédente était une épée à double tranchant. L'avantage était qu'il visait la programmation abstraite plutôt que concrète. L'inconvénient était que lorsqu'il était nécessaire de modifier l'interface, il était nécessaire de modifier toutes les classes qui ont implémenté l'interface. Le cadre de collecte actuel avant Java 8 n'avait pas de méthode foreach. La solution qui peut être pensée est d'ajouter de nouvelles méthodes et implémentations aux interfaces associées dans le JDK. Cependant, pour la version publiée, il est impossible d'ajouter de nouvelles méthodes à l'interface sans affecter l'implémentation existante. Donc la méthode par défaut introduite. Leur objectif est de rendre l'interface non introduite incompatible avec les implémentations existantes.
Comme indiqué ci-dessous,
Interface publique Animal {par défaut void Eat () {System.out.println ("Animal Eat Method Default"); }} Une interface est déclarée et il n'y a qu'une seule méthode par défaut à l'intérieur. Écrivez ensuite une classe spécifique pour implémenter cette interface.
Classe publique Dog implémente Animal {public void Sayhi () {System.out.println ("Dog"); } public static void main (String args []) {dog dog = new dog (); dog.eat (); }}Dans une classe spécifique, il n'est pas nécessaire de remplacer la méthode par défaut, mais les méthodes abstraites doivent être implémentées.
Héritage multiple des méthodes par défaut
Le code indiqué ci-dessous,
Interface publique a {void doSomething (); par défaut void hello () {System.out.println ("Hello World à partir de l'interface a"); } par défaut void foo () {System.out.println ("foo de l'interface a"); }} L'interface B étend un {par défaut void Hello () {System.out.println ("Hello World From Interface B"); A.super.hello (); this.foo (); A.super.foo (); }} classe C implémente B, a {@Override public void dosomething () {System.out.println ("C objet a besoin de faire quelque chose"); } public static void main (String args []) {a obj = new C (); obj.hello (); // appelle la méthode de B obj.dosomething (); }}Résultat d'impression:
Bonjour le monde de l'interface bhello world à partir de l'interface afoo à partir de l'interface afoo de l'interface objet AC Besoin de faire quelque chose
Obj.hello () appelle la méthode par défaut dans l'interface B. En même temps, la méthode par défaut dans l'interface B appelle la méthode par défaut dans l'interface parent.
Jetons un coup d'œil à un autre exemple et réfléchissons à la méthode par défaut avec le même nom en héritage multiple, comme indiqué ci-dessous.
Interface publique D {par défaut void Hello () {System.out.println ("Hello World From D"); }} interface e {par défaut void hello () {System.out.println ("Hello World From E"); }} classe f implémente d, e {@Override public void hello () {System.out.println ("Hello World F class"); D.Super.hello (); E.Super.hello (); } public static void main (String args []) {f f = new f (); F.hello (); }} Nous devons formuler la méthode par défaut de quelle interface à appeler comme suit:
D.Super.hello (); E.Super.hello ();
Un autre exemple de la méthode par défaut de Java8 :
Java8 a ajouté une méthode par défaut pour l'interface, ce qui signifie qu'il peut être implémenté dans l'interface. Cette méthode d'implémentation est l'implémentation par défaut, et vous pouvez également réécrire cette méthode par défaut dans la classe d'implémentation d'interface.
L'exemple suivant:
classe publique appinterfacefaultMethod {public static interface defaultMethodDemo {// définir la méthode par défaut, avec le mot-clé par défaut précédé par la méthode par défaut, suivie de la déclaration de méthode et de la méthode Body Void Demo (String Input) {System.out.println (entrée); } void doSomething (); } public static class Democlass implémente defaultMethodDemo {@Override public void dosomething () {System.out.println ("faire quelque chose"); }} classe statique publique DemoClassOverrideMo implémente defaultMethodDemo {// Réécriture de la méthode par défaut @Override public void Demo (String Input) {System.out.println ("Demo" + Input + "par Method Override"); } @Override public void dosomething () {System.out.println ("faire quelque chose"); }} public static void main (String [] args) {defaultMethodDemo Demo = new DemoClass (); Demo.demo ("ABC"); DefaultMethodDemo DemoOverride = new DemoClassOverRideDemo (); Demooverride.demo ("ABC"); }}Ce qui précède est une introduction détaillée à la méthode par défaut de l'interface Java8, et j'espère que cela sera utile à l'apprentissage de tous.