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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?