Когда я столкнулся с этим, я использую доступный пакет внутренний или вложенный класс для реализации интерфейса, выталкивая реализованный метод из открытого класса.
Обычно это потому, что у меня есть класс с определенным общедоступным API, который должен реализовывать что-то еще, чтобы выполнить свою работу (довольно часто, потому что чем-то другим был обратный вызов, замаскированный под интерфейс ) - это часто случается с как сопоставимый. Я не хочу, чтобы публичный API был загрязнен (принудительно публичной) реализацией интерфейса.
Надеюсь, это поможет.
Кроме того, если вы действительно хотите, чтобы методы были доступны только пакету, вам не нужен спецификатор защищенной области, вам нужен спецификатор области по умолчанию (опущен). Использование защищенных, конечно, позволит подклассам видеть методы.
Кстати, я думаю, что методы интерфейса выводятся как общедоступные, потому что исключение имеет интерфейс, который реализуется только классами в одном пакете; они чаще всего вызываются чем-то в другом пакете, что означает, что они должны быть публичными.