Acessando a classe interna privada no mesmo pacote
Tenho duas unidades de compilação:
public class OuterClass{
private static class InnerClass{
public String test(){
return "testing123";
}
}
public static void main( String[] args ){
new CallingClass().test( new InnerClass() );
}
}
public class CallingClass{
public void test( Object o ){
try{
Method m = o.getClass().getMethod( "test" );
Object response = m.invoke( o );
System.out.println( "response: " + response );
}
catch( Exception e ){
e.printStackTrace();
}
}
}
Se eles estiverem no mesmo pacote, tudo funcionará e a "resposta: testing123" será impressa. Se eles estiverem em pacotes separados, o IllegalAccessException será lançado.
Pelo que entendi, a exceção é lançada porque CallingClass não pode invocar métodos InnerClass privados. Mas o que eu não entendo é por que é permitido no mesmo pacote? InnerClass não é protegido por pacote. Privado não deve ser visível fora de OuterClass, mesmo que esteja no mesmo pacote. Entendo algo errado?