Более чем в одном случае я обнаружил, что мне нужна видимость переменных, что невозможно в 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
или значение по умолчанию. Причина в том, что это недостаточно важно для включения, или это больше связано с возможными побочными эффектами, которые я не учел?