Adloun

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 deux int exactement. Les trois sont possibles après conversion, mais f(int, double) et f(double, int) sont toutes deux plus précises que f(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

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 →