Автор: stash ← к списку ← →
В Java существуют следующие модификаторы доступа:
- private: члены класса доступны только внутри класса;
- default (package-private) (модификатор, по-умолчанию): члены класса видны внутри пакета (если класс будет так объявлен он будет доступен только внутри пакета);
- protected: члены класса доступны внутри пакета и в наследниках;
- public: члены класс доступны всем;
Последовательность модификаторов по убыванию уровня закрытости: private, default ,protected, public).
Во время наследования возможно изменения модификаторов доступа в сторону большей видимости. Так сделано для того, чтобы не нарушался принцип LSP для наследуемого класса.
Если Вам понравился вопрос, проголосуйте за него
Голосов: 27 Голосовать
Developing an API, the warning message «Access can be package-package» in Java classes can be really annoying.
I’ve already spent some time going through the settings to find a way to disable this message but without any findings. Any idea how to disable the message?
6 Answers 6
The inspection rule is «Declaration access can be weaker» and there are two options which can be disabled «Suggest package-private visibility level. «
Go to Settings → Editor → Inspections then Java → Declaration redundancy → Declaration access can be weaker rule.
Here you can either disable it at all or select the suggestion options on the right pane:
To disable on a case by case basis, use
Move the cursor to public , press Alt + Enter and choose one of the options:
Another solution not mentioned so far: if you have a method that’s declared public, and the IDE is telling you that there are no references to the method from outside the package, then perhaps you need to add a test case that calls that method from outside the package. In other words, treat the warning as signalling the absence of a test case for a public method.
Well, one possible reason could be a redundant class-type.
Here, in the above image, «public» keyword is not necessary.
Java обеспечивает контроль доступа через три модификатора — public, protected and private. Мы не обязаны использовать эти модификаторы доступа всегда, поэтому у нас есть еще модификатор доступа по умолчанию, а именно default access, package-private или no modifier.
Мы можем использовать модификаторы доступа с классами, а также переменными класса и методами.
Модификаторы доступа Java Class
Разработчики языка разрешили использовать только «public» или «default» для работы с Java классами.
- Если класс «public», то мы можем получить к нему доступ из любой точки мира, то есть от любого другого класса, расположенного в каких-либо других пакетах и т.д.
- Мы можем иметь только один «public» класс в исходном файле. Также следует указать, что имя файла должно быть таким же, как имя public-класса.
- Если класс имеет «default access» (доступ по умолчанию), то он может быть доступен только из других классов в одном пакете.
Приведенные выше правила применяются и к внутренним классам.
Модификаторы доступа в Java классе
Мы можем иметь все четыре модификатора доступа для переменных-членов класса и методов. Однако правила доступа для членов класса будут применимы только после правил доступа на уровне класса. Например, если класс, имеющий доступ по умолчанию (default access), то он не будет виден в других пакетах и, следовательно, методы и переменные класса также будут не видны.
Мы будем изучать каждый случай в отдельности, а затем покажем доступы в простой программе.
Модификатор public
Если член класса «public», то он может быть использован в любом месте. Переменная или метод имеет доступ в глобальном масштабе. Это простой способ обеспечить доступ к членам класса, однако мы должны заботиться в использовании этого ключевого слова/модификатора с переменными класса, в противном случае кто-нибудь может изменить значения. Обычно переменные класса private, а доступ к этим переменным осуществляется через getter-setter методы.
Модификатор private
Если член класса «private», то он будет доступен только внутри того же класса. Это наиболее ограниченный доступ, поэтому член класса не будет виден для внешнего мира. Обычно переменные класса и методы, предназначенные для использования только внутри класса, делают private.
Модификатор protected
Если член класса «protected», то он будет доступен только для классов в одном пакете и в подклассах. Этот модификатор менее ограничен, чем private, но более ограничен, чем public. Обычно мы используем это ключевое слово/модификатор, чтобы убедиться, что переменные класса доступны только для подклассов.
Модификатор default
Если в члене класса не указан какой-либо модификатор доступа, то он имеет доступ по умолчанию (default). Правила доступа подобны классам и членам класса с доступом по умолчанию. В этом случае доступ будет только для классов в одном пакете. Этот доступ является более ограниченным, чем public и protected, но менее ограничен, чем private.
Цепочка доступности: от менее доступных к более доступным
(менее доступный) private