Ich bin ein wenig verwirrt über den Begriff "Paket privat", den einige der Dokumentationen zusammen mit der Verwendung von "Standardzugriff" verwenden. Sind paketprivater und Standardzugriff nicht gleichbedeutend mit geschützt?
java
terminology
protected
access-modifiers
package-private
TurtleToes
quelle
quelle
default
Modifikatoren vor (Schnittstellen-) Methoden zu setzen. Aber das ist kein Zugriffsmodifikator! Alle Zugriffsmodifikatoren und ihre Bereiche werden in dieser Tabelle übersichtlich dargestellt .Antworten:
Ja, es ist fast das gleiche. Der geschützte Modifikator gibt an, dass auf das Mitglied nur innerhalb seines eigenen Pakets (wie bei package-private) und zusätzlich durch eine Unterklasse seiner Klasse in einem anderen Paket zugegriffen werden kann .
quelle
public static final
, für eine Methode istpublic abstract
, für eine Aufzählung oder Anmerkung istpublic
und für eine Klasse ist espublic static
Der "Standard" -Zugriffsmodifikator (derjenige, bei dem keiner von ihnen explizit angegeben ist) ist "package-private", was bedeutet, dass nur Dinge im selben Paket auf sie zugreifen können. Wenn Sie sich jedoch im selben Paket befinden, bedeutet dies nichts über die Vererbungsbeziehung zwischen Klassen - es handelt sich lediglich um eine Namenskonvention.
"Geschützt" bedeutet, dass nicht nur Klassen im selben Paket, sondern auch Unterklassen (unabhängig davon, in welchem Paket sich diese Unterklassen befinden) darauf zugreifen können.
quelle
Der Standardzugriff für Klassen ist paketprivat, der Standardzugriff für Schnittstellenmitglieder ist jedoch öffentlich.
z.B
Die Standardzugriffsregeln für Schnittstellen sind nicht dieselben wie für Klassen.
quelle
Paket-privater und Standardzugriff sind Synonyme. Ein Objekt kann auch auf geschützte Mitglieder der Objekte zugreifen, deren Klassen sich im selben Paket befinden. Ein Objekt kann auch auf geschützte Mitglieder seiner Oberklassen zugreifen, ohne eine Bedingung für sein Paket zu haben. Als konkretes Beispiel:
quelle
"Paket privat" und Standardzugriff sind identisch. In früheren Versionen des Compilers um 1.1.2 / 3 war 'package' ein zulässiger Modifikator, wurde jedoch ignoriert, was dasselbe bedeutet wie kein Modifikator, dh 'package private'. Kurz darauf gab es eine kurzlebige Mode, um
/*package*/
(als Kommentar) in solche Situationen zu bringen. In ähnlicher Weise konnte man zu dieser Zeit Dinge wie synchronisierte Klassen deklarieren, obwohl es wiederum keinen tatsächlichen semantischen Effekt gab.Keiner von beiden ist derselbe wie 'protected', der sich auf abgeleitete Klassen in anderen Paketen erstreckt.
quelle
Aus der Java-Sprachspezifikation
quelle
default und package-private sind beide gleich, was bedeutet, dass beide von jeder Klasse verwendet werden können, bis sie sich im selben Paket befinden.
Der paketprivate Begriff wird tatsächlich mit der Bedeutung des privaten Modifikators bezeichnet, da privat bedeutet, dass er nur in derselben Klasse verfügbar ist und keine anderen Klassen oder Unterklassen innerhalb oder außerhalb desselben Pakets darauf zugreifen können.
Daher bedeutet package-private dasselbe wie default .
quelle