Хотя часто цитируемая причина в том, что «интерфейсы определяют публичные API», я думаю, что это упрощение. (И это тоже "пахнет" круговой логикой.)
Вложенный интерфейс может быть защищенным или закрытым, и в этом случае он вообще не определяет публичный интерфейс.
Было бы бессмысленно иметь интерфейсы, которые имеют смесь модификаторов доступа; например частично открытый и частично ограниченный другими классами в том же пакете, что и интерфейс. На самом деле, в некоторых случаях это может быть совершенно полезным, IMO.
На самом деле, я думаю, что часть рассуждений о том, чтобы сделать члены интерфейса неявно публичными, заключается в том, что делает Java проще :
Неявно члены публичного интерфейса проще для программистов иметь дело. Сколько раз вы видели код (классы), где модификаторы доступа к методу выбирались, казалось бы, случайно? Многим «обычным» программистам трудно понять, как лучше всего управлять границами абстракции Java 1 . Добавление public / protected / package к интерфейсам делает их еще сложнее.
Неявно открытые члены интерфейса упрощают спецификацию языка ... и, следовательно, это задача для авторов компиляторов Java и тех, кто реализует API Reflection.
Эта линия мышления делает "интерфейсы, определяющие публичные API" следствием (или характеристикой) языкового дизайна ... а не наоборот. В действительности, эти две мысли, вероятно, развивались параллельно в умах разработчиков Java.
1 - Конечно, программисты-топ-пейнтеры не испытывают затруднений с этими вещами и могут приветствовать более богатую палитру функций контроля доступа. Но что происходит, когда их код передается кому-то другому для поддержки?