В более чем одном случае я обнаружил, что желаю иметь переменную видимость, которая невозможна в 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
Типичный случай, когда я хочу что-то подобное, это когда создается абстрактный класс. Иногда я нахожу, что абстрактному родителю нужен доступ к определенным членам, но конкретным детям тоже. Я могу дать им этот доступ, сделав членов protected
, но это открывает доступ к остальной части пакета, когда я действительно не хочу.
Чтобы быть полностью ясным, я знаю, что такой модификатор не возможен в Java. У меня вопрос, почему такой модификатор не включен в Java? Мне кажется (для меня) это более естественный уровень видимости, чем protected
или по умолчанию. Является ли причина, по сути, недостаточной для включения, или она связана с возможными побочными эффектами, которые я не учел?