Явно новичок в Java, но мне интересно, почему доступ к пакетам считается "более ограничительным", чем доступ к подклассам. То есть, каждый модификатор доступа, который предоставляет подклассы с доступом к члену, также предоставляет весь пакет с доступом, и существуют модификаторы, обеспечивающие доступ к пакету, но не доступ к подклассам.
Разве это не полностью назад? Скажем, у меня есть класс ControlledInstantiation в некотором пакете. Если у меня есть еще один класс, то иControlledInstantiation расширяет ControlledInstantiation, я не могу вызвать конструктор ControlledInstantiation, если я не настроил его на защищенный или открытый. И если я установил его для защиты, теперь любой другой класс в пакете может создавать его так часто, как ему нравится. Таким образом, что-то, что обязано быть заменяемым для своего суперкласса (и, синтаксически, есть), получает тот же или менее доступ к суперклассу, чем то, что служит отдельной, но связанной функции. Мне нравится рассказывать своему ребенку, что он не может играть с вашим кошельком, потому что вы не позволите своим соседам сделать это, а затем разрешите своим сосерам спать в вашем доме, потому что ваш ребенок делает.
Итак, я думаю, я спрашиваю, что мотивировало это решение, и как я могу обойти его?