Доступ к частному внутреннему классу в том же пакете

У меня есть две единицы компиляции:

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, даже если он находится в том же пакете. Я что-то не понимаю?

11
задан martsraits 10 May 2011 в 13:57
поделиться