Хоча часто цитується причина в тому, що "інтерфейси визначають загальнодоступні API", я вважаю, що це надмірне спрощення. (І це "пахне" круговою логікою.)
Було б безглуздо мати інтерфейси, що мають суміш модифікаторів доступу; наприклад, частково загальнодоступні та частково обмежені іншими класами в тому ж пакеті, що і інтерфейс. Насправді, в деяких випадках це може бути корисним внизу, IMO.
Насправді, я думаю, що частина міркувань щодо того, щоб зробити учасників інтерфейсу неявним публічним, полягає в тому, що це робить мову Java простішою :
Члени учасників публічного інтерфейсу простіші для програмістів. Скільки разів ви бачили код (класи), де модифікатори доступу методу вибиралися, здавалося б, випадковим чином? Багато "звичайних" програмістів мають труднощі зрозуміти, як найкраще керувати межами абстракції Java 1 . Додавання загальнодоступних / захищених / приватних пакетів до інтерфейсів робить їх ще складніше.
Члени учасників загальнодоступного інтерфейсу спрощують специфікацію мови ... і, отже, завдання для письменників-компіляторів Java та людей, які реалізують API відбиття.
Думка про те, що "інтерфейси визначають загальнодоступні API", можливо, є наслідком (або характеристикою) спрощення дизайнерського рішення щодо спрощення мови ... не навпаки. Але насправді два напрямки думки, ймовірно, розвивалися паралельно у свідомості дизайнерів Java.
У будь-якому випадку з офіційної відповіді на RFE в JDK-8179193 чітко видно, що команда дизайнерів Java вирішила 2, що дозволити protected
використання інтерфейсів додає складності для малої реальної вигоди. Кудос до @skomisa для пошуку доказів .
Докази в RFE вирішують це питання. Це є офіційною причиною, чому цього не було додано.
1 - Зрозуміло, програмісти з вищою зброєю не мають труднощів з цими речами, і вони можуть вітати більш багату палітру функцій контролю доступу. Але що відбувається, коли їх код передають комусь іншому для підтримки?
2 - Ви можете не погодитися з їх рішенням або викладеними ними міркуваннями, але це суперечка.