Was ist der Standardbereich einer Methode in Java?

165

Wenn ich tippe:

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

Was ist der Standardbereich von doThis()?

Öffentlichkeit? Geschützt? Privat?

Joe Fontana
quelle

Antworten:

264

Der Standardbereich ist package-private. Alle Klassen im selben Paket können auf die Methode / das Feld / die Klasse zugreifen. Paket-privat ist strenger als geschützte und öffentliche Bereiche, aber freizügiger als private Bereiche.

Weitere Informationen:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html

Esko Luontola
quelle
2
"Paket-Standard ist strenger als ..."
Reinaldoluckman
7
Erwähnenswert ist auch, dass "package-private" ein guter Anwendungsbereich ist, wenn Methoden für externe Komponententests verfügbar gemacht werden.
Gary Rowe
1
Wenn dies der Fall ist, warum sollte es dann jemals notwendig sein, etwas öffentlich zu machen, es sei denn, Sie erstellen eine Bibliothek oder etwas, von dem Benutzer Funktionen für ihren Code erhalten würden?
Daniel
2
@ user3858162 Die meisten nicht trivialen Anwendungen sind in mehreren Paketen organisiert. In diesem Fall ist ein öffentlicher Bereich erforderlich, um aufrufende Methoden aus anderen Paketen aufzurufen.
Esko Luontola
19

Auf alles, was als Paket privat definiert ist, kann von der Klasse selbst, anderen Klassen innerhalb desselben Pakets, jedoch nicht außerhalb des Pakets und nicht von Unterklassen zugegriffen werden.

Auf dieser Seite finden Sie eine praktische Tabelle mit Modifikatoren für Zugriffsebenen ...

user15299
quelle
9

Ohne einen Zugriffsmodifikator kann auf ein Klassenmitglied im gesamten Paket zugegriffen werden, in dem es deklariert ist. Weitere Informationen finden Sie in der Java-Sprachspezifikation, §6.6.

Mitglieder einer Schnittstelle sind immer öffentlich zugänglich, unabhängig davon, ob sie explizit deklariert wurden oder nicht.

erickson
quelle
5

Der Standardbereich ist "Standard". Es ist komisch - siehe diese Referenzen für weitere Informationen.

Michael Haren
quelle
3
Eigentlich ist es nicht: es ist paketprivat
Maurice Perry
2
Ich kann meine Antwort nicht löschen, da sie akzeptiert wurde. Ich ermutige Joe, der Antwort von @ Esko zu folgen!
Michael Haren
1
Die zweite Verbindung ist unterbrochen (und übrigens ist es leicht zu übersehen, dass dies zwei Verbindungen sind)
idclev 463035818
1

Java 8 ermöglicht jetzt die Implementierung von Methoden innerhalb einer Schnittstelle selbst mit Standardbereich (und nur statisch).

shiv
quelle