programmation Java (école d'ingénieur) · Chapitre 4 · Exercice de TD
Quelle méthode est appelée ?
Méthodes · niveau 2
Énoncé
Une classe contient les trois méthodes surchargées suivantes :
static String f(int a, double b) { return "f(int, double)"; }
static String f(double a, int b) { return "f(double, int)"; }
static String f(double a, double b) { return "f(double, double)"; }
Pour chacun des appels f(1, 2.0), f(1.0, 2), f(1.0, 2.0) et f(1, 2), dire quelle version est choisie, ou pourquoi l'appel est refusé.
Corrigé
f(1, 2.0):f(int, double), dont les types correspondent exactement.f(1.0, 2):f(double, int).f(1.0, 2.0):f(double, double), la seule possible.f(1, 2)est refusé. Aucune version n'accepte deuxintexactement. Les trois sont possibles après conversion, maisf(int, double)etf(double, int)sont toutes deux plus précises quef(double, double), sans qu'aucune des deux ne soit plus précise que l'autre. Le compilateur ne choisit pas au hasard :
Ambigu.java:11: error: reference to f is ambiguous
System.out.println(f(1, 2));
^
both method f(int,double) in Ambigu and method f(double,int) in Ambigu match
On lèverait l'ambiguïté en écrivant f(1, 2.0) ou f(1.0, 2).
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.