Какой модификатор доступа по умолчанию в Java? [дубликат]
этот вопрос уже есть ответ здесь:
- Какой спецификатор доступа по умолчанию используется в Java? 12 ответов
Что такое модификатор доступа по умолчанию для метода или переменной экземпляра, если я не четко об этом заявить?
например:
package flight.booking;
public class FlightLog
{
private SpecificFlight flight;
FlightLog(SpecificFlight flight)
{
this.flight = flight;
}
}
является ли модификатор доступа этого конструктора защищенным или посылка? Могут ли другие классы в том же пакете, что составляет flight.booking
, вызов этого конструктора?
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 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-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:
члены класса, определенные без использования явного доступа модификатор определяется с помощью специальных возможностей пакета (также называемых по умолчанию доступность.) Члены с доступом к пакету доступны только для классы и интерфейсы, определенные в одном пакете.