У меня есть две единицы компиляции:
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();
}
}
}
Если они находятся в одном пакете, все работает и печатается «response: testing123». Если они находятся в отдельных пакетах, выдается исключение IllegalAccessException.
Как я понимаю, генерируется исключение, потому что CallingClass не может вызывать частные методы InnerClass. Но я не понимаю, почему это разрешено в одном пакете? InnerClass не защищен пакетом. Private не должен быть виден за пределами OuterClass, даже если он находится в том же пакете. Я что-то не понимаю?