В Java есть четыре доступных модификатора доступа для методов:
public
- любой класс может использовать этот метод.
protected
- классы в одном пакете и подклассы в любом пакете могут использовать этот метод.
private
- только этот класс может использовать этот метод.
no modifier
(«пакет приватный») - только классы в одном пакете могут использовать этот метод.
Часто случается, что я хочу иметь полезные методы в суперклассе, которые могут использовать все подклассы. Но другим классам не имеет смысла обращаться к этому методу, и в некотором смысле это нарушит инкапсуляцию.
Поэтому я должен объявить эти полезные методы в суперклассе public
или protected
, который предоставляет их всем остальным классам, по крайней мере, в пакете. Даже если они предназначены только для использования подклассами.
Есть ли причина, по которой subclasses-only
в Java нет модификатора доступа? Это кажется мне очень странным. Я что-то пропустил?
Кроме того, subclasses-only
модификатор доступа также будет полезен, когда вы хотите выставлять переменные только подклассам. Что со мной случается много.
У Java изначально был такой модификатор. Он был написан,
private protected
но удален в Java 1.0.Я предполагаю, что это был суждение, что дополнительная сложность не стоила затрат.
Каждая языковая функция имеет свою стоимость: обучая ее новым программистам; в документации; в реализации его в компиляторе, JVM и инструментах разработки; в рассуждениях о правильности программы; в сдерживании будущей языковой эволюции; и более. Языковые функции взаимодействуют друг с другом, потенциально с N 2 взаимодействиями.
Какой процент Java-программистов прочитал спецификации языка Java и VM? Бьюсь об заклад, это небольшой процент, который требует еще более простой язык ради понятности и технических продуктов, от которых мы можем зависеть
Преимущество этой
private protected
функции было небольшим, поскольку пакет является основным модульным модулем.источник
Контроль доступа можно рассматривать как результат прикрытия с воображаемым разработчиком, который работает с вашим классом над методами и свойствами класса ...
Это публично ...
Это личное ...
Это защищено ...
Это пакет.
Это защищенный частный ...
источник
Это уже существует. Это защищено.
Вы можете контролировать, какие классы существуют в пакете. Если в пакете нет другого класса и данная переменная или метод защищены, это «только подклассы».
Тем не менее, еще раз, вы можете контролировать, какие классы существуют в пакете. Вы можете просто не использовать защищенные методы или переменные.
источник