Какой модификатор доступа по умолчанию в Java? [дубликат]


этот вопрос уже есть ответ здесь:

  • Какой спецификатор доступа по умолчанию используется в Java? 12 ответов

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

например:

package flight.booking;

public class FlightLog
{
    private SpecificFlight flight;

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

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

13 98

13 ответов:

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

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

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

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

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

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

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

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

когда он находится в классе:

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
}

модификатор доступа по умолчанию-package-private-виден только из того же пакета

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

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

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
    }
}

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

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

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

package flight.booking;

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

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

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

package flight.booking;

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

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

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

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

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

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

из книги Oca Java SE 7 программист I:

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