Overloading

Overloading pour des méthodes Java

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

Java offre une grande flexibilité aux développeurs. Ils peuvent utiliser les méthodes possédant les mêmes noms mais prenant des paramètres différents. Cette technique est impossible à achever pour les développeurs PHP.

Cette surcharge des méthodes s'applique aussi bien aux constructeurs qu'aux fonctions placées dans le corps d'une classe. Cette permission contribue à garder une sémantique correcte du code. Imaginons une situation où notre application devrait permettre de calculer un prix à partir d'un String ou d'un Integer. Overloading de la fonction getPrice() rendra cette tâche possible. Analysons donc le code ci-dessous :

afficher le code

On remarquera que le résultat sera exactement le même pour les deux méthodes appelées :

Price directly from double method : 119.6
String => double = 100.0
Price directly from string overloaded method : 119.6

Quelles sont les différences entre overloading et overriding en Java ?

La surcharge de la méthode getPrice() a lieu au moment de compilation. Elle est invisiblement décomposée en deux méthodes différentes pour que l'environnement de lancement sache quelle function appeler avec quels paramètres. Le moment où la machine virtuelle Java est capable de déterminer quelle version utiliser, s'appelle l'attachement statique (static binding). La notion inverse est l'attachement dynamique (dynamic binding) et il a lieu quand la JVM ne peut distinguer de quelle méthode il s'agit qu'au moment d'exécution du code.

Regardons la différence entre static binding et dynamic binding sur un exemple qui ne sera pas exécuté. Il servira juste à illustrer cette nuance :

afficher le code

L'attachement statique est donc la première chose qui différencie la surcharge d'une méthode à un héritage (override).

La deuxième différence entre les deux repose sur le fait qu'on peut "overloader" plusieurs méthodes au sein de la même classe. En ce qui concerne overriding, on ne peut que le faire dans les sous-classes.

Bartosz KONIECZNY Standards du codage

Une question ? Une remarque ?

*

*

Un conseil Symfony2

Comment générer un url absolu sous Symfony2 ?

La génération des urls sous Symfony2 se déroule via la méthode generateUrl() de la classe Symfony\Bundle\FrameworkBundle\Controller\Controller.

Cette fonction doit prendre un paramètre obligatoire - le premier qui indique le nom de la route à générer.

Les deux paramètres suivants sont facultatifs. Le premier parmi eux indique les attributs de l'url (par exemple le numéro de la page). Le deuxième prend pour valeur soit true, soit false. S'il est mis en true, cela veut dire que Symfony2 va générer l'url absolu. Cela s'illustre avec cet exemple :

$this->generateUrl('registerConfirm', array('code' => sha1('test')), true);