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
Canardpour quedeplacement()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
Iprécise, on écritI.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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
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.