problème d'héritage : pas la bonne version de la méthode exécutée
Salut à tous,
J'ai un problème d'héritage qui me perturbe, car il remet en cause une partir de ma compréhension de java, j'espère que quelqu'un saura me donner une explication...
Au sein de mon équipe, nous avons un framework sur lequel reposent plusieurs applications : une des classes est abstraite (AbstractApplicationContext), et chaque application doit sous classer cette classe. La méthode getApplicationName() renvoie normalement le nom de l'application, définit dans un fichier de configuration.
Dans mon application, j'ai besoin de gérer différemment le nom de l'application, donc j'override la méthode getApplicationName() dans MyApplicationContext.
Le problème, c'est que dans ma jsp, quand je fais ça :
Code:
1 2
| AbstractApplicationContext ctx=AbstractApplicationContext.getCurrentContext(request);
ctx.getApplicationName(); |
ctx est bien de type MyApplicationContext (je le vois dans le debugger), mais c'est la version de la classe mère de getApplicationName() qui est exécutée. J'ai vérifié, les signatures des méthodes sont les même. D'ailleurs, quand je fais
Code:
1 2
| MyApplicationContext ctx=(MyApplicationContext)AbstractApplicationContext.getCurrentContext(request);
ctx.getApplicationName(); |
ça fonctionnne bien, c'est la version définie dans MyApplicationContext qui est exécutée.
Du coup, pour avoir un truc vraiment générique dans le framework, je suis obligé de passer par un truc pas beau :
Code:
1 2 3
| AbstractApplicationContext tmpCtx=AbstractApplicationContext.getCurrentContext(request);
Method method = Class.forName(tmpCtx.getClass().getName()).getMethod("getApplicationName", null);
out.print(method.invoke(tmpCtx, null)); |
Donc voilà, j'ai un truc qui fonctionne mais qui est moche, et je ne comprends pas pourquoi la version simple ne fonctionne pas. Si quelqu'un a une explication au fait que le premier bout de code ne donne pas le résultat escompté, je suis preneur ;-)
merci d'avance
--
Vincent