Какова область действия метода по умолчанию в Java?


166

Если я наберу:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

какова область действия по умолчанию doThis()?

Public? Защищенное? Частный?

Ответы:


264

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

Дополнительная информация:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html.


2
«Пакет по умолчанию более
строг,

7
Также стоит упомянуть, что «package-private» - это хорошая область для использования при демонстрации методов для внешнего модульного тестирования.
Гэри Роу

1
Если это так, то зачем было бы когда-либо делать что-то публичное, если вы не создаете создание библиотеки или чего-то еще, из чего пользователи будут получать функциональность для своего кода?
Даниэль

2
@ user3858162 Большинство нетривиальных приложений организованы в несколько пакетов, и в этом случае для вызова вызывающих методов из других пакетов требуется общедоступная область.
Эско Луонтола

19

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

Смотрите эту страницу для удобной таблицы модификаторов уровня доступа ...


9

Без модификатора доступа член класса доступен во всем пакете, в котором он объявлен. Вы можете узнать больше из Спецификации языка Java, §6.6.

Члены интерфейса всегда общедоступны, независимо от того, объявлены они явно или нет.


5

Область по умолчанию - «по умолчанию». Это странно - смотрите эти ссылки для получения дополнительной информации.


3
На самом деле это не так: это частный пакет
Морис Перри

2
Я не могу удалить свой ответ, так как он был принят. Я призываю Джо пойти с ответом @ Эско!
Майкл Харен

1
вторая ссылка не работает (и, кстати, легко пропустить, что это две ссылки)
idclev 463035818

1

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


0

Если вы не даете никакого модификатора вашему методу, то по умолчанию это будет модификатор по умолчанию, который имеет область действия в пакете.
Для получения дополнительной информации вы можете обратиться http://wiki.answers.com/Q/What_is_default_access_specifier_in_Java

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.