Я только начал читать книгу по Java и удивился; какой модификатор доступа является значением по умолчанию, если он не указан?
Видимость по умолчанию известна как «частный пакет» (хотя вы не можете использовать это явно), что означает, что поле будет доступно изнутри того же пакета, к которому принадлежит класс.
Как указала mdma, это неверно для членов интерфейса, для которых по умолчанию установлено значение «public».
Спецификатор по умолчанию зависит от контекста.
Для классов и объявлений интерфейсов по умолчанию используется частный пакет. Это находится между защищенным и частным, разрешая доступ только классам в одном пакете. (Защищенный такой же, но также разрешающий доступ к подклассам вне пакета.)
class MyClass // package private
{
int field; // package private field
void calc() { // package private method
}
}
Для членов интерфейса (полей и методов) доступ по умолчанию является публичным. Но обратите внимание, что само объявление интерфейса по умолчанию имеет значение package private.
interface MyInterface // package private
{
int field1; // static final public
void method1(); // public abstract
}
Если у нас есть объявление
public interface MyInterface2 extends MyInterface
{
}
Классы, использующие MyInterface2, могут видеть field1 и method1 из суперинтерфейса, поскольку они являются общедоступными, даже если они не могут видеть объявление самого MyInterface.
Если спецификатор доступа не указан, это доступ на уровне пакета (для этого нет явного спецификатора) для классов и членов классов. Методы интерфейса неявно открыты.
Видимость по умолчанию (без ключевого слова) - пакет , что означает, что он будет доступен каждому классу, находящемуся в том же пакете.
Интересное примечание: protected не ограничивает видимость подклассами, но также и другими классами в том же пакете
Подробнее см. здесь . По умолчанию используется не приватный / публичный / защищенный, а совершенно другая спецификация доступа. Он не используется широко, и я предпочитаю быть более конкретным в своих определениях доступа.