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?

questionAnswers(2)

yourAnswerToTheQuestion