Это происходит при доступе к пакетному методу класса, который находится в том же пакете, но находится в другом jar и загрузчике классов.
Пакеты (как при доступе к пакетам) ограничены для ClassLoader.
Вы утверждаете, что родительский ClassLoader загружает интерфейс, а дочерний
ClassLoader загружает реализацию. Это не будет работать из-за
ClassLoader-специфичный характер определения объема пакета. Интерфейс не виден
класс реализации, потому что, хотя это то же имя пакета,
они находятся в разных загрузчиках классов.
Я только просмотрел сообщения в этой теме, но я думаю, что вы уже обнаружили
что это будет работать, если вы объявите интерфейс общедоступным. Это также
работать, чтобы интерфейс и реализация загружались одним и тем же ClassLoader.
Действительно, если вы ожидаете, что произвольные люди будут реализовывать интерфейс (который вы
очевидно делать, если реализация загружается другим
ClassLoader), тогда вы должны сделать интерфейс общедоступным.
ClassLoader-scoping области пакета (который относится к доступу к пакету
методы, переменные и т. д.) аналогична общей области видимости ClassLoader
имена классов. Например, я могу определить два класса, оба с именем com.foo.Bar,
с совершенно другим кодом реализации, если я определю их в отдельном
Загрузчиков классов.
Joel