Java: Доступ к подклассу без доступа к пакету

Довольно новый для Java, но мне интересно, почему доступ к пакету считается «более ограничительным», чем доступ к подклассу. То есть каждый модификатор доступа, который предоставляет подклассам доступ к члену, также предоставляет доступ ко всему пакету, и есть модификаторы, которые предоставляют доступ к пакету, но не к подклассу.

Разве это не совсем наоборот? Допустим, у меня есть класс ControlledInstantiation в каком-то пакете. Если у меня есть другой класс. ТакжеControlledInstantiation extends ControlledInstantiation, я не смогу вызвать конструктор ControlledInstantiation, если я не установил его как protected или public. И если я установлю его как protected, теперь любой другой класс в пакете может создавать его экземпляры так часто, как ему нравится. Таким образом, что-то, что должно быть заменено своим суперклассом (и, синтаксически, is) получает такой же или меньший доступ к суперклассу, чем то, что выполняет отдельную, но связанную функцию. Это как сказать ребенку, что он не может играть с вашим кошельком, потому что вы не позволяете это делать своим соседям, а затем позволяете соседям спать в вашем доме, потому что ваш ребенок это делает.

Итак, я думаю, я спрашиваю, что мотивировало это решение, и как его обойти?

10
задан Innominate 21 November 2010 в 05:18
поделиться