Jaki jest domyślny zakres metody w języku Java?


165

Jeśli napiszę:

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

jaki jest domyślny zakres doThis()?

Publiczny? Chroniony? Prywatny?

Odpowiedzi:


264

Domyślnym zakresem jest pakiet-prywatny. Wszystkie klasy w tym samym pakiecie mają dostęp do metody / pola / klasy. Pakiet prywatny jest bardziej rygorystyczny niż zakres chroniony i publiczny, ale bardziej liberalny niż zakres prywatny.

Więcej informacji:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html


2
„Pakiet domyślny jest bardziej rygorystyczny niż ...”
reinaldoluckman

7
Warto również wspomnieć, że „pakiet-prywatny” to dobry zakres do wykorzystania podczas ujawniania metod do zewnętrznych testów jednostkowych.
Gary Rowe

1
Jeśli tak jest, to dlaczego kiedykolwiek miałoby być konieczne upublicznienie czegoś, chyba że tworzysz bibliotekę lub cokolwiek, z czego użytkownicy będą otrzymywać funkcje dla swojego kodu?
Daniel

2
@ user3858162 Większość nietrywialnych aplikacji jest zorganizowanych w wiele pakietów, w którym to przypadku zasięg publiczny jest potrzebny do wywoływania metod z innych pakietów.
Esko Luontola

19

Do wszystkiego, co zdefiniowano jako prywatny pakiet, można uzyskać dostęp przez samą klasę, inne klasy w tym samym pakiecie, ale nie poza pakietem i nie przez podklasy.

Na tej stronie znajduje się przydatna tabela modyfikatorów poziomu dostępu ...


9

Bez modyfikatora dostępu element członkowski klasy jest dostępny w całym pakiecie, w którym jest zadeklarowany. Więcej informacji można znaleźć w specyfikacji języka Java, §6.6.

Składowe interfejsu są zawsze publicznie dostępne, niezależnie od tego, czy zostały jawnie zadeklarowane, czy nie.


5

Zakres domyślny to „domyślny”. To dziwne - zobacz te referencje, aby uzyskać więcej informacji.


3
Właściwie to nie jest: to pakiet prywatny
Maurice Perry

2
Nie mogę usunąć mojej odpowiedzi, ponieważ została zaakceptowana. Zachęcam Joe do skorzystania z odpowiedzi @ Esko!
Michael Haren

1
drugi link jest uszkodzony (a przy okazji łatwo przeoczyć, że są to dwa linki)
idclev 463035818

1

Java 8 umożliwia teraz implementację metod w samym interfejsie z domyślnym zakresem (i tylko statycznym).


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.