Какова область действия метода по умолчанию в 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

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

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

user15299
источник
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


источник