Чтобы ответить на ваши вопросы по одному:
* An access specifier which allows access by the class and all subclasses, but NOT by other classes in the same package? (Protected-minus)
Это было в Java 1.0 (private protected
был модификатор ) и удалено.Я не совсем понимаю, почему, но это определенно рассматривалось как нечто, не стоящее хлопот.Текущее расположение заставляет все модификаторы переходить от менее ограниченных к более ограниченным, что является более простым (как в случае с меньшим возможным изменением), что является целью разработки Java.
* An access specifier which allows access by the class, all classes in the same package, AND all classes in any sub-package? (Default-plus)
* An access specifier which adds classes in sub-packages to the entities currently allowed access by protected? (Protected-plus)
Эти два недоступны по связанной причине.В настоящее время Java не имеет понятия о подпакете, она просто притворяется тем, что обычные файловые и основанные на jar загрузчики классов (а также компилятор) следуют структуре каталогов базовой файловой системы для поиска файлов.Java будет уделять этому более широкое внимание с помощью JSR 294 («суперпакета») (как уже отмечали другие), который даст вам гораздо более детальный контроль над тем, что публикуется вне пакета (и, следовательно, вы можете сделать вещи общедоступными, если хотитек, и это все равно не будет видно).