Почему в Java нет модификатора видимости подкласса?

Более чем в одном случае я обнаружил, что мне нужна видимость переменных, что невозможно в Java. Я хотел, чтобы определенные члены были видны в их собственном классе и в любых подклассах, но не для остальной части пакета или остального мира. Другими словами, я хотел этого:

Modifier        Class     Package   Subclass  World
sub-class       Y         N         Y         N

Однако разработчики Java дали мне только this :

Modifier        Class     Package   Subclass  World
public          Y         Y         Y         Y
protected       Y         Y         Y         N
no modifier     Y         Y         N         N
private         Y         N         N         N

Типичный случай, когда мне нужно что-то подобное, - это создание абстрактного класса. Иногда я обнаруживаю, что абстрактному родителю нужен доступ к определенным членам, но и конкретным потомкам тоже. Я могу предоставить им этот доступ, сделав члены защищенными , но это открывает доступ к остальной части пакета, когда я действительно не хочу этого.

Чтобы быть полностью ясным, я знаю такой модификатор невозможно в Java. У меня вопрос: почему такой модификатор не включен в Java? Мне кажется, что это более естественный уровень видимости, чем protected или значение по умолчанию. Причина в том, что это недостаточно важно для включения, или это больше связано с возможными побочными эффектами, которые я не учел?

69
задан Michael McGowan 14 March 2011 в 14:45
поделиться