Interfaces

L'interface comme contrat de méthodes en Java : implements, plusieurs interfaces pour une classe, variable de type interface, choix entre interface et classe abstraite, méthode par défaut.

  • 19 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Interface : de quoi s'agit-il ?

    Voir la réponse

    Liste de signatures de méthodes qu'une classe s'engage à fournir, sans imposer comment et sans exiger de lien de parenté.

    Elle décrit ce qu'un objet sait faire, pas ce qu'il est. Une variable de son type peut désigner n'importe quel objet dont la classe la remplit.

  • Cette classe est refusée avec Avion is not abstract and does not override abstract method atterrir() in Volant. Quelle correction est juste ?

    ```java
    interface Volant {
    void decoller();
    void atterrir();
    }

    class Avion implements Volant {
    public void decoller() { System.out.println("piste"); }
    }
    `

    • Ajouter public void atterrir() { … } dans Avion
    • Ajouter void atterrir() { … } sans public dans Avion
    • Ajouter extends Volant à la classe Avion
    • Déclarer atterrir() en private dans Avion
    Voir la réponse

    Ajouter public void atterrir() { … } dans Avion

    Implémenter, c'est fournir toutes les méthodes du contrat, publiques comme dans l'interface. Sans public, ou en private, la visibilité est plus faible : refusé. Et extends ne s'applique pas à une interface depuis une classe.

  • Une classe déclare qu'elle remplit un contrat avec … ; elle peut en remplir …, séparés par des virgules.

    Voir la réponse

    Une classe déclare qu'elle remplit un contrat avec implements ; elle peut en remplir plusieurs, séparés par des virgules.

    C'est ce qui contourne l'héritage simple : class Canard extends Animal implements Volant, Nageur reprend une classe et deux contrats.

  • Contrat : de quoi s'agit-il ?

    Voir la réponse

    Engagement d'une classe envers ceux qui l'utilisent : les méthodes qu'elle fournit, quelle que soit la manière dont elle les réalise.

    Le code qui utilise le contrat ne dépend que de lui, pas des classes concrètes : on peut changer l'une sans toucher à l'autre.

  • Une méthode lancer(Volant v) doit accepter Oiseau, qui hérite déjà d'Animal, Avion, qui hérite de Machine, et Drone. Que faire de Volant ?

    • Une interface que les trois classes implémentent
    • Une classe abstraite dont les trois classes héritent
    • Une classe qui hérite à la fois d'Animal et de Machine
    • Rien : on écrit trois méthodes lancer sans lien entre elles
    Voir la réponse

    Une interface que les trois classes implémentent

    Oiseau et Avion ont déjà une classe parente et Java n'admet qu'un extends. Une interface, cumulable, donne la capacité commune à des classes sans lien, et un seul lancer suffit.