Adloun

programmation Java (école d'ingénieur) · Chapitre 10 · Application directe du cours

Le canard

Classes abstraites et interfaces · niveau 2

Énoncé

Deux interfaces définissent chacune une méthode par défaut de même en-tête :


interface Nageur {
    default String deplacement() { return "nage"; }
}

interface Volant {
    default String deplacement() { return "vole"; }
}
  • La déclaration suivante compile-t-elle ? Pourquoi ?

class Canard implements Nageur, Volant { }
  • Écrire la classe Canard pour que deplacement() renvoie « nage et vole », en réutilisant les deux méthodes par défaut.

Corrigé

  • Non : le canard hériterait de deux méthodes par défaut de même signature, et Java refuse de choisir :

E4.java:13: error: types Nageur and Volant are incompatible;
class Canard implements Nageur, Volant { }
^
  class Canard inherits unrelated defaults for deplacement() from types Nageur and Volant
  • La classe doit redéfinir la méthode. Pour appeler la version par défaut d'une interface I précise, on écrit I.super.methode() :

class Canard implements Nageur, Volant {
    @Override
    public String deplacement() {                    // résolution obligatoire du conflit
        return Nageur.super.deplacement() + " et " + Volant.super.deplacement();
    }
}

new Canard().deplacement() renvoie alors nage et vole.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →