Bonjour,
C'est pas vraiment un problème mais plus une question. Je vais essayer d'expliquer clairement ma situation. J'ai une classe mère qui a la méthode "callMethod" qui permet de faire une rétroinspection pour lancer lancer la méthode dont le nom est passé en argument. La méthode "callMethod" est protected.
Ensuite j'ai une classe fille qui hérite de la première et qui fait appel à la méthode de la classe mère "callMethod". Et les méthode que je cherche sont dans la classe fille. Mon interrogation porte sur le fait qu'il ne trouve les méthodes qu'à condition qu'elles soient déclarées public et non protected ou private.
On pourrait se dire que c'est normal puisque les méthodes de la classe fille ne sont pas accessibles depuis une classe mère, mais lorsque je demande à voir d'où vient l'appelle de la méthode il me dis bien qu'il vient de la classe fille, et c'est là que je ne comprend pas la subtilité du mécanisme.
Avec une illustration ça sera surement plus clair:
donc ma question est : pourquoi faut-il déclarer obligatoirement "maFonction" comme étant public pour que l'utilisation de "callMethod" fonctionne, sinon il ne la trouve pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class Mere { protected Object callMethod(Object obj, Object[] args, String methodName) throws Exception { Class[] paramTypes = null; if(args != null) { paramTypes = new Class[args.length]; for(int i=0;i<args.length;++i) { paramTypes[i] = args[i].getClass(); } } Method m = obj.getClass().getDeclaredMethod(methodName, paramTypes); return m.invoke(obj, args); } } public class fille extends mere { public void test() { callMethod(this, null, "maFonction"); } public void maFonction() { System.out.println("maFonction"); } }
Partager