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