[Compilateur] appel de méthodes avec signature similaire
Je me suis rendu compte d'un petit truc étrange en Java.
Si j'ai 2 méthode avec le même nom mais des paramètres différents qui sont des objets :
Code:
1 2 3 4 5 6
|
void truc(Integer b){
}
void truc(String a){
} |
et que j'appèle la méthode truc(null). Java va sortir l'erreur "The method truc(Integer) is ambiguous for the type Test".
Ok, c'est logique, il est impossible de savoir quel méthode appeler.
Mais maintenant si une des 2 méthode à comme paramètre un Object :
Code:
1 2 3 4 5 6 7
| static void truc(Object b){
System.out.println("Object");
}
static void truc(String a){
System.out.println("string");
} |
l'appel de truc(null)ne créera aucune erreur de compilation et lors de l'exécution, la méthode truc(String) sera toujours appelée!
Ma question est pourquoi quand une des méthodes à comme paramètre un Object il n'y a pas d'erreur de compilation et est-ce que cela fonctionne de la même façon sur toutes les JVM?