Яка область застосування методу на Java за замовчуванням?


166

Якщо я набираю:

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

що таке область за замовчуванням doThis()?

Публічний? Захищений? Приватний?

Відповіді:


264

Область за замовчуванням - пакетна приватна. Усі класи в одному пакеті можуть отримати доступ до методу / поля / класу. Пакет-приватний суворіший, ніж захищений та загальнодоступний, але дозволений, ніж приватний.

Більше інформації:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
"Пакет за замовчуванням суворіший за ..."
reinaldoluckman

7
Можна також зазначити, що "пакетне приватне" - це хороша сфера використання при викритті методів тестування зовнішніх одиниць.
Гері Роу

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

2
@ user3858162 Більшість нетривіальних додатків організовані в декілька пакетів, і в цьому випадку потрібна загальна область для виклику методів виклику з інших пакетів.
Еско Луонтола

19

До всього, що визначено як приватний пакет, можна отримати доступ до самого класу, інших класів у тому ж пакеті, але не за межами пакета та не підкласів.

Дивіться цю сторінку для зручної таблиці модифікаторів рівня доступу ...


9

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

Учасники інтерфейсу завжди є загальнодоступними, незалежно від того, явно заявлені чи ні.


5

Область за замовчуванням - "за замовчуванням". Це дивно - див. Ці посилання для отримання додаткової інформації.


3
Насправді це не так: це пакетне приватне
Моріс Перрі

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

1
друга ланка розірвана (і btw легко упустити, що це дві ланки)
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.