Acessar metodo herdado via reflection

moçada seguinte, estou tentando acessar um metodo em uma classe q foi herdado e tem assinatura protected…

o cenário é assim:

Class A{

     protected metodoQueQueroAcessar(){ }
}
Class B extends A { }
Class C extends B { }

estou fazendo assim via reflection:

Class classe = objetoQueTenhoDoTipo_C.getClass();
Method metodo = classe.getDeclaredMethod("metodoQueQueroAcessar", new Class[]{});
metodo.setAccessible(true);
metodo.invoke(objetoQueTenhoDoTipo_C, new Object[]{ });

porem sempre obtenho o erro de NoSuchMethod bla bla bla, dizendo q o metodo nao existe na classe e tals… Ai eu peço, como eu acesso via reflection esse metodo herdado??

voce vai ter que ir subindo na hierarquia e procurar o metodo.

getDeclaredMethod só retorna um método que esteja declarado na própria classe que você está chamando. Eu vi que não dá para usar getMethod porque ele só retorna métodos públicos. Olhe o que ocorre…

import java.lang.reflect.*;

class A {
    protected void protectedMethod () { System.out.println ("This is a protected 

method called from " + getClass().getName()); }
    public String toString() { return "A"; }
}
class B extends A {
    public String toString() { return "B"; }
}
class C extends B {
    public String toString() { return "C"; }
}
class TesteProtectedComReflection {
    public static void main(String[] args) throws Exception {
        Class<?> klass = C.class;
        Method m = null;
        while (m == null && klass != Object.class) {
            try {
                m = klass.getDeclaredMethod ("protectedMethod", new Class[]{});
            } catch (NoSuchMethodException ex) { 
                klass = klass.getSuperclass();
            }
        }
        if (m != null) {
            System.out.println (m); // imprime "protected void A.protectedMethod()"
            m.invoke (new C()); // imprime "This is a protected method called from C"
        } else {
            System.out.println ("Method was not found in class C");
        }
    }
}

opa, entao obrigado aos dois ai …

eu tb tinha descoberto aqui que o getMethod nao ia dá prq ele só retorna os metodos publicos, mas eu achava q o getDeclaredMethod retornava todos (public, private, protected) inclusive os herdados … bom, vivendo e aprendendo

bom de qualquer forma resolvi de forma semelhante ai ao que voce postou thingol, percorrendo a hierarquia de baixo pra cima conforme o Mark_Ameba havia dito …

Vlw aos dois pela ajuda …
[]´s