Actualización de la composición de la interfaz basada en Java

¡Acostúmbrate a escribir juntos! Este es el noveno día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento

1.1 Descripción general de la actualización de la composición de la interfaz

  • La composición de la interfaz.
    • constante:public static final
    • Método abstracto:public abstract
    • Método predeterminado (Java 8)
    • Métodos estáticos (Java 8)
    • Métodos privados (Java 9)

1.2 Métodos por defecto en interfaces (JDK8)

Todos sabemos que cuando una clase implementa una interfaz, es necesario anular todos los métodos abstractos en la interfaz. Pero ahora se ha agregado un nuevo método a la interfaz, ¿qué pasa si la clase que implementa esta interfaz no quiere anular este método? En este momento, se puede usar el método predeterminado en la interfaz, no es obligatorio anularlo y también se puede proporcionar el cuerpo del método.

  • El formato de definición del método predeterminado en la interfaz:
    • Formato:public default 返回值类型 方法名(参数列表){}
    • ejemplo:public default void show(){}
  • Notas sobre los métodos predeterminados en las interfaces:
    • Los métodos predeterminados no son métodos abstractos, por lo que no están obligados a anularlos. Pero se puede anular, elimine la palabra clave predeterminada al anular
    • public se puede omitir, default no se puede omitir:default void show(){}

1.3 Métodos estáticos en interfaces (JDK8)

  • El formato de definición del método estático en la interfaz:

    • Formato:public static 返回值类型 方法名(参数列表){}
    • ejemplo:public static void show(){}
  • Notas sobre métodos estáticos en interfaces:

    • Los métodos estáticos solo se pueden llamar por el nombre de la interfaz , no por el nombre de la clase de implementación o el nombre del objeto
    • public puede ser omitido, static no puede ser omitido:static void show(){}
  • interfaz

package test;

public interface Inter {
    void show();

    default void method() {
        System.out.println("默认方法");
    }

//    public static void test(){
//        System.out.println("静态方法");
//    }

    static void test(){
        System.out.println("静态方法");
    }
}
复制代码
  • Clase de implementación
package test;

public class InterImpl implements Inter{
    @Override
    public void show() {
        System.out.println("show方法");
    }
}
复制代码
  • clase de prueba
package test;

public class Demo {
    public static void main(String[] args) {
        Inter i = new InterImpl();
        i.show(); //show方法
        i.method(); //
//        i.test(); //报错

        Inter.test(); //静态方法,接口名调用静态方法
    }
}
复制代码

1.4 Métodos privados en interfaces (JDK9)

En Java 9, se agregaron métodos privados con cuerpos de métodos, lo que en realidad sentó las bases en Java 8: Java 8 permite definir métodos predeterminados y métodos estáticos con cuerpos de métodos en las interfaces. Esto puede causar un problema: cuando dos métodos predeterminados o métodos estáticos contienen la misma implementación de código, el programa debe considerar extraer este código de implementación en un método común, y este método común no necesita ser utilizado por otros, por lo que se oculta con private, que es la inevitabilidad de agregar métodos privados en Java 9.

  • El formato de definición de métodos privados en una interfaz :
    • Formato 1 (no estático) :private 返回值类型 方法名(参数列表){}
    • Ejemplo 1:private void show() {}
    • Formato 2 (estático) :private static 返回值类型 方法名(参数列表){}
    • Ejemplo 2:private static void method() {}
  • Notas sobre métodos privados en interfaces :
    • Los métodos predeterminados pueden llamar a métodos privados estáticos y no estáticos
    • Los métodos estáticos solo pueden llamar a métodos estáticos privados
package test;

public interface Inter {
    default void show1() {
        System.out.println("show1开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
//        show();
        method();
        System.out.println("show1结束");
    }


    static void method1() {
        System.out.println("method1开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
        method();
        System.out.println("method1结束");
    }

    private void show(){
        System.out.println("初级工程师");
        System.out.println("中级工程师");
        System.out.println("高级工程师");
    }

    private static void method(){
        System.out.println("初级工程师");
        System.out.println("中级工程师");
        System.out.println("高级工程师");
    }
}
复制代码

Supongo que te gusta

Origin juejin.im/post/7084937783864721444
Recomendado
Clasificación