El método predeterminado de la interfaz Java8
¿Cuál es el método predeterminado y por qué hay un método predeterminado?
En pocas palabras, la interfaz puede tener métodos de implementación, y no es necesario implementar la clase para implementar sus métodos. Simplemente agregue la palabra clave predeterminada antes del nombre del método.
¿Por qué necesitas esta función? En primer lugar, la interfaz anterior era una espada de doble filo. La ventaja era que estaba dirigido a la programación abstracta en lugar de la programación concreta. La desventaja era que cuando era necesario modificar la interfaz, era necesario modificar todas las clases que implementaron la interfaz. El marco de colección actual antes de Java 8 no tenía un método foreach. La solución que se puede pensar es agregar nuevos métodos e implementaciones a las interfaces relacionadas en el JDK. Sin embargo, para la versión publicada, es imposible agregar nuevos métodos a la interfaz sin afectar la implementación existente. Entonces el método predeterminado introducido. Su propósito es hacer que la interfaz no se introduzca incompatible con las implementaciones existentes.
Como se muestra a continuación,
Public Interface Animal {predeterminado void eat () {System.out.println ("Método predeterminado de animales de comer"); }} Se declara una interfaz, y solo hay un método predeterminado dentro. Luego escriba una clase específica para implementar esta interfaz.
El perro de clase pública implementa animal {public void sayhi () {System.out.println ("perro"); } public static void main (string args []) {dog dog = new dog (); dog.eat (); }}En una clase específica, no es necesario anular el método predeterminado, pero se deben implementar métodos abstractos.
Herencia múltiple de métodos predeterminados
El código que se muestra a continuación,
interfaz pública a {void dosomething (); predeterminado void hello () {System.out.println ("Hello World de la interfaz A"); } predeterminado void foo () {system.out.println ("foo from interface a"); }} La interfaz B extiende un {Void predeterminado Hello () {System.out.println ("Hello World desde la interfaz B"); A.super.hello (); this.foo (); A.super.foo (); }} La clase C implementa B, A {@Override public void dosomething () {System.out.println ("C Object necesita hacer algo"); } public static void main (string args []) {a obj = new C (); obj.hello (); // Llame al método de B obj.Dosomething (); }}Resultado de impresión:
Hello World de Interface Bhello World desde la interfaz Afoo desde la interfaz Afoo desde la interfaz AC Object Need Haz algo
obj.hello () llama al método predeterminado en la interfaz B. Al mismo tiempo, el método predeterminado en la interfaz B llama al método predeterminado en la interfaz principal.
Echemos un vistazo a otro ejemplo y pensemos en el método predeterminado con el mismo nombre en la herencia múltiple, como se muestra a continuación.
interfaz pública d {predeterminado void hello () {System.out.println ("Hello World de D"); }} interfaz e {predeterminado void hello () {System.out.println ("Hello World de E"); }} La clase F implementa 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 (); }} Necesitamos formular el método predeterminado de qué interfaz llamar de la siguiente manera:
D.super.hello (); E.Super.hello ();
Otro ejemplo del método predeterminado de Java8 :
Java8 ha agregado un método predeterminado para la interfaz, lo que significa que se puede implementar en la interfaz. Este método de implementación es la implementación predeterminada, y también puede reescribir este método predeterminado en la clase de implementación de interfaz.
El siguiente ejemplo:
Public Class AppinterFacedefaultMethod {Interfaz estática pública predeterminada Methoddemo {// Definir el método predeterminado, con la palabra clave predeterminada precedida por el método predeterminado, seguido por la declaración del método y el método del cuerpo predeterminado Void demo (String input) {System.out.println (input); } vacío dosomething (); } public static class Democlass implementa defaultMethodDemo {@Override public void dosomething () {system.out.println ("hacer algo"); }} public class static static DemoclasSoverRidedEmo implementa defaultMethodDemo {// Reescribe el método predeterminado @Override public void demo (String input) {system.out.println ("demo" + input + "por método anulado"); } @Override public void dosomething () {system.out.println ("hacer algo"); }} public static void main (string [] args) {defaultMethodDemo demo = new Democlass (); demo.demo ("ABC"); DefaultMethodDemo Demooverride = new DemocLassoverRidedEmo (); demooverride.demo ("ABC"); }}Lo anterior es una introducción detallada al método predeterminado de la interfaz Java8, y espero que sea útil para el aprendizaje de todos.