Что такое модификатор доступа по умолчанию в Java?

Что такое модификатор доступа по умолчанию для метода или переменной экземпляра, если я не укажу его явно?

Например:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight)
    {
        this.flight = flight;
    }
}

Является ли модификатор доступа этого конструктора защищенным или пакетом? Могут ли другие классы в одном пакете, который flight.booking, вызвать этот конструктор?

+85
источник поделиться
13 ответов

Из Java документация

Если класс не имеет модификатора (по умолчанию, также называемого package-private), он виден только в пределах его собственного пакета (пакеты называются группами связанных классов - вы узнаете о них на более позднем уроке.)

В member level вы также можете использовать общедоступный модификатор или no modifier (package-private), как и классы верхнего уровня, и с тем же значением.

Полная история, которую вы можете прочитать здесь (, которую я недавно написал):

http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html

+83
источник

Из документации:

Access Levels
Modifier        Class    Package    Subclass    World
-----------------------------------------------------
public           Y        Y          Y           Y
protected        Y        Y          Y           N
(Default)        Y        Y          N           N
private          Y        N          N           N
+50
источник
другие ответы

Связанные вопросы


Похожие вопросы

Это зависит от контекста.

Когда он находится внутри класса:

class example1 {

    int a = 10; // This is package-private (visible within package)

    void method1() // This is package-private as well.
    {
        -----
    }
}

Когда он находится в интерфейсе:

interface example2 {

    int b = 10; // This is public and static.
    void method2(); // This is public and abstract
}
+25
источник

Модификатор доступа по умолчанию является закрытым пакетом - видимым только из одного пакета

+20
источник

Вот пример кода, который должен в значительной степени суммировать это для вас... В дополнение к приведенному ниже, показывая, как вы не можете получить доступ к умолчанию в другом пакете, есть еще одна вещь.

По умолчанию недоступен в подклассе, если класс, который подклассифицирует его в другом пакете, но доступен, если подкласс находится в одном пакете.

package main;

public class ClassA {
    private int privateVar;
    public int publicVar;
    int defaultVar;
}

package main;

public class ClassB {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Works
        int v3 = a.privateVar;  // Doesn't work

    }
}

package other;

public class ClassC {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        int v1 = a.publicVar;   // Works
        int v2 = a.defaultVar;  // Doesn't work
        int v3 = a.privateVar;  // Doesn't work
    }
}
+7
источник

Модификатор по умолчанию package. Только код в том же пакете сможет вызвать этот конструктор.

+5
источник

Модификатор доступа к конструктору будет package-private (по умолчанию). Поскольку вы объявили класс public, он будет виден везде, но конструктор не будет. Ваш конструктор будет виден только в его пакете.

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;

    FlightLog(SpecificFlight flight) // Default access modifier
    {
        this.flight = flight;
    }
}

Если вы не пишете какой-либо конструктор в своем классе, тогда компилятор генерирует конструктор по умолчанию с тем же модификатором доступа класса. В следующем примере компилятор сгенерирует конструктор по умолчанию с модификатором доступа public (тот же, что и класс).

package flight.booking;

public class FlightLog // Public access modifier
{
    private SpecificFlight flight;
}
+2
источник

Модификатор доступа по умолчанию package-private (т.е. ПО УМОЛЧАНИЮ), и он отображается только из одного пакета.

+1
источник

Да, это видно в том же пакете. Все, что находится за пределами этого пакета, не будет иметь к нему доступа.

+1
источник

Защищен или упакован ли модификатор доступа этого конструктора?

Я думаю, что неявно ваш модификатор доступа к конструкторам будет вашим модификатором доступа к классу. поскольку ваш класс имеет открытый доступ, конструктор будет иметь открытый доступ неявно

0
источник

Нет, вы не можете вызвать уровень доступа по умолчанию к другому пакету. Но у вас есть доступ в пакете. Для более подробной информации следуйте эту ссылку.

0
источник

Модификатор доступа по умолчанию - если класс не имеет модификатора (по умолчанию, также называемого package-private), он виден только в пределах его собственного пакета (пакеты называются группами связанных классов).

0
источник

Из книги под названием OCA Java SE 7 Programmer I:

Члены класса, определенные без использования явного доступа модификаторы определяются с помощью доступности пакета (также называемой по умолчанию доступность). Члены, имеющие доступ к пакету, доступны только для классы и интерфейсы, определенные в одном пакете.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос