Что такое модификатор доступа по умолчанию в Java?
Что такое модификатор доступа по умолчанию для метода или переменной экземпляра, если я не укажу его явно?
Например:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
Является ли модификатор доступа этого конструктора защищенным или пакетом? Могут ли другие классы в одном пакете, который flight.booking
, вызвать этот конструктор?
Ответы
Ответ 1
Из Java документация
Если класс не имеет модификатора (по умолчанию, также называемого package-private), он виден только в пределах его собственного пакета (пакеты называются группами связанных классов - вы узнаете о них на более позднем уроке.)
В member level
вы также можете использовать общедоступный модификатор или no modifier
(package-private), как и классы верхнего уровня, и с тем же значением.
Полная история, которую вы можете прочитать здесь (, которую я недавно написал):
http://codeinventions.blogspot.com/2014/09/default-access-modifier-in-java-or-no.html
Ответ 2
Из документации:
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
Ответ 3
Это зависит от контекста.
Когда он находится внутри класса:
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
}
Ответ 4
Модификатор доступа по умолчанию является закрытым пакетом - видимым только из одного пакета
Ответ 5
Вот пример кода, который должен в значительной степени суммировать это для вас... В дополнение к приведенному ниже, показывая, как вы не можете получить доступ к умолчанию в другом пакете, есть еще одна вещь.
По умолчанию недоступен в подклассе, если класс, который подклассифицирует его в другом пакете, но доступен, если подкласс находится в одном пакете.
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
}
}
Ответ 6
Модификатор по умолчанию package
. Только код в том же пакете сможет вызвать этот конструктор.
Ответ 7
Модификатор доступа к конструктору будет 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;
}
Ответ 8
Модификатор доступа по умолчанию package-private (т.е. ПО УМОЛЧАНИЮ), и он отображается только из одного пакета.
Ответ 9
Да, это видно в том же пакете. Все, что находится за пределами этого пакета, не будет иметь к нему доступа.
Ответ 10
Защищен или упакован ли модификатор доступа этого конструктора?
Я думаю, что неявно ваш модификатор доступа к конструкторам будет вашим модификатором доступа к классу. поскольку ваш класс имеет открытый доступ, конструктор будет иметь открытый доступ неявно
Ответ 11
Нет, вы не можете вызвать уровень доступа по умолчанию к другому пакету. Но у вас есть доступ в пакете. Для более подробной информации следуйте эту ссылку.
Ответ 12
Модификатор доступа по умолчанию - если класс не имеет модификатора (по умолчанию, также называемого package-private), он виден только в пределах его собственного пакета (пакеты называются группами связанных классов).
Ответ 13
Из книги под названием OCA Java SE 7 Programmer I:
Члены класса, определенные без использования явного доступа модификаторы определяются с помощью доступности пакета (также называемой по умолчанию доступность). Члены, имеющие доступ к пакету, доступны только для классы и интерфейсы, определенные в одном пакете.