L'invocation des méthodes est résolue statiquement :
lors de la compilation, le compilateur vérifie les arguments passés dans l'appel de la méthode
ainsi que leurs types pour décider quelle méthode sera appelée à l'exécution du programme.
Dans le cas d'une surcharge en modifiant uniquement les types des paramètres de la méthode par des sous-types,
le compilateur verifie les types des arguments et les compare avec les types des paramètres de chaque méthode pour décider quelle méthode sera invoquée.
Rappel : quand on utilise dans le code une référence pour invoquer une méthode (
refVar.foo()
),
le compilateur regarde uniquement les méthodes qui sont déclarées pour le type (et les types parents) de cette référence (
refVar
),
et si la méthode invoquée n'est pas parmi ces méthodes alors le compilateur générera une erreur.
On peut utiliser le casting pour indiquer au compilateur d'utiliser un autre type pour la vérification de l'appel des méthodes (
(TestClass) obj
).