Maison  >  Article  >  Java  >  Comment implémenter la mise à jour de la composition de l'interface Java

Comment implémenter la mise à jour de la composition de l'interface Java

WBOY
WBOYavant
2023-05-11 22:58:041067parcourir

1.1 Présentation mise à jour de la composition de l'interface

  • Composition de l'interface

    • Constante : public static finalpublic static final

    • 抽象方法:public abstract

    • 默认方法(Java 8)

    • 静态方法(Java 8)

    • 私有方法(Java 9)

1.2 接口中默认方法(JDK8)

我们都知道,一个类实现一个接口,就要重写这个接口中的所有抽象方法。但现在接口中新增了一个方法,实现这个接口的类不想重写这个方法怎么办?这时就可以使用接口中默认方法,它不强制被重写,而且还可以提供方法体。

  • 接口中默认方法的定义格式:

    • 格式:public default 返回值类型 方法名(参数列表){}

    • 范例:public default void show(){}

  • 接口中默认方法的注意事项:

    • 默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字

    • public可以省略,default不能省略:default void show(){}

1.3 接口中静态方法(JDK8)

  • 接口中静态方法的定义格式:

    • 格式:public static 返回值类型 方法名(参数列表){}

    • 范例:public static void show(){}

  • 接口中静态方法的注意事项:

    • 静态方法只能通过接口名调用, 不能通过实现类名或者对象名调用

    • public可以省略, static不能省略:static void show(){}

  • 接口

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("静态方法");
    }
}
  • 实现类

package test;

public class InterImpl implements Inter{
    @Override
    public void show() {
        System.out.println("show方法");
    }
}
  • 测试类

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 接口中私有方法(JDK9)

Java 9 中新增了带方法体的私有方法,这其实在 Java 8 中就埋下了伏笔:Java 8 允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是 Java 9 增加私有方法的必然性 。

  • 接口中私有方法的定义格式

    • 格式1(非静态)private 返回值类型 方法名(参数列表){}

    • 范例1:private void show() {}

    • 格式2(静态)private static 返回值类型 方法名(参数列表){}

    • 范例2:private static void method() {}

    Méthode abstraite : public abstract
  • Méthode par défaut (Java 8)

    • Méthode statique (Java 8)

    • Méthode privée (Java 9)

1.2 Méthode par défaut dans l'interface (JDK8)🎜🎜Nous savons tous qu'une classe implémente Pour une interface, toutes les méthodes abstraites de cette interface doivent être réécrites. Mais maintenant, il y a une nouvelle méthode dans l'interface. Que dois-je faire si la classe qui implémente cette interface ne veut pas remplacer cette méthode ? À ce stade, vous pouvez utiliser la méthode par défaut dans l'interface, qui n'est pas obligée d'être remplacée, et peut également fournir un corps de méthode. 🎜🎜🎜🎜Format de définition de la méthode par défaut dans l'interface : 🎜🎜🎜🎜🎜Format : nom de la méthode de type de valeur de retour par défaut publique (liste de paramètres){}🎜🎜🎜🎜Exemple : public default void show(){}🎜🎜🎜🎜🎜Remarques sur les méthodes par défaut dans les interfaces :🎜🎜🎜🎜🎜La méthode par défaut n'est pas une méthode abstraite, elle n'est donc pas forcée d'être remplacée. Mais il peut être réécrit. Lors de la réécriture, supprimez le mot-clé par défaut 🎜🎜🎜🎜public peut être omis, mais default ne peut pas être omis : default void show(){}🎜🎜🎜🎜🎜1.3 Méthodes statiques. dans les interfaces (JDK8) 🎜🎜🎜🎜Format de définition des méthodes statiques dans les interfaces : 🎜🎜🎜🎜🎜Format : nom de la méthode de type de valeur de retour statique publique (liste de paramètres){}🎜🎜🎜🎜Exemple : public static void show(){}🎜🎜🎜🎜🎜Remarques sur les méthodes statiques dans les interfaces : 🎜🎜🎜🎜🎜les méthodes statiques ne peuvent être appelées que via des 🎜noms d'interface🎜, et non via des noms de classe d'implémentation ou noms d'objets L'appel de 🎜🎜🎜🎜public peut être omis, static ne peut pas être omis : static void show(){}🎜🎜🎜🎜🎜interface🎜🎜🎜
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("高级工程师");
    }
}
🎜🎜🎜implementation class🎜🎜🎜rrreee 🎜🎜🎜Classe de test 🎜🎜🎜rrreee🎜1.4 Méthodes privées dans les interfaces (JDK9) 🎜🎜De nouvelles méthodes privées avec des corps de méthode sont ajoutées dans Java 9, qui a en fait jeté les bases de Java 8 : Java 8 permet de définir des méthodes dans les interfaces Les méthodes par défaut et statiques du corps. Cela peut poser un problème : lorsque deux méthodes par défaut ou méthodes statiques contiennent la même implémentation de code, le programme doit envisager d'extraire ce code d'implémentation dans une méthode commune, et cette méthode commune n'a pas besoin d'être utilisée par d'autres, elle est donc masquée. par privé. C'est la nécessité d'ajouter des méthodes privées dans Java 9. 🎜🎜🎜🎜🎜Format de définition des méthodes privées dans les interfaces 🎜 : 🎜🎜🎜🎜🎜🎜Format 1 (non statique) 🎜 : nom de la méthode du type de valeur de retour privé (liste de paramètres) {}🎜🎜 🎜 🎜Exemple 1 : private void show() {}🎜🎜🎜🎜🎜Format 2 (statique)🎜 : nom de la méthode de type de valeur de retour statique privée (liste de paramètres){} 🎜🎜🎜🎜Exemple 2 : private static void method() {}🎜🎜🎜🎜🎜🎜Notes sur les méthodes privées dans les interfaces🎜 : 🎜🎜🎜🎜🎜Les méthodes par défaut peuvent appeler des méthodes statiques privées Et méthodes non statiques🎜🎜🎜🎜les méthodes statiques ne peuvent appeler que des méthodes statiques privées🎜🎜🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer