Toegang tot modificatoren in Java

1. Overzicht

In deze zelfstudie bespreken we toegangsmodificatoren in Java, die worden gebruikt voor het instellen van het toegangsniveau voor klassen, variabelen, methoden en constructors.

Simpel gezegd, er zijn vier toegangsmodificatoren:openbaar, privaat, beschermd en standaard (geen trefwoord).

Voordat we beginnen, laten we er rekening mee houden dat een klasse op het hoogste niveau kan gebruiken openbaar of standaard alleen toegang tot modificatoren. Op ledenniveau kunnen we ze alle vier gebruiken.

2. Standaard

Als we geen expliciet trefwoord gebruiken, stelt Java een standaard toegang tot een bepaalde klasse, methode of eigenschap. De standaardtoegangsmodificator wordt ook wel genoemd pakket-privé, wat betekent dat alle leden zijn zichtbaar binnen hetzelfde pakket maar zijn niet toegankelijk vanuit andere pakketten:

pakket com.baeldung.accessmodifiers; openbare klasse SuperPublic {static void defaultMethod () {...}}

defaultMethod () is toegankelijk in een andere klasse van hetzelfde pakket:

pakket com.baeldung.accessmodifiers; openbare klasse Public {public Public () {SuperPublic.defaultMethod (); // Verkrijgbaar in hetzelfde pakket. }}

Het is echter niet beschikbaar in andere pakketten.

3. Openbaar

Als we de openbaar trefwoord naar een klasse, methode of eigenschap dan we maken het beschikbaar voor de hele wereld, dat wil zeggen dat alle andere klassen in alle pakketten het kunnen gebruiken. Dit is de minst beperkende toegangsmodificator:

pakket com.baeldung.accessmodifiers; openbare klasse SuperPublic {openbare statische leegte publicMethod () {...}}

publicMethod () is verkrijgbaar in een ander pakket:

pakket com.baeldung.accessmodifiers.another; importeer com.baeldung.accessmodifiers.SuperPublic; openbare klasse AnotherPublic {openbare AnotherPublic () {SuperPublic.publicMethod (); // Overal beschikbaar. Laten we een ander pakket opmerken. }}

Voor meer informatie over hoe het openbaar trefwoord gedraagt ​​zich wanneer toegepast op een klasse, interface, geneste openbare klasse of interface en methode, zie het speciale artikel.

4. Privé

Elke methode, eigenschap of constructor met de extensie privaat trefwoord is alleen toegankelijk vanuit dezelfde klas. Dit is de meest beperkende toegangsmodificator en vormt de kern van het concept van inkapseling. Alle gegevens worden verborgen voor de buitenwereld:

pakket com.baeldung.accessmodifiers; openbare klasse SuperPublic {statisch privé void privateMethod () {...} privé void anotherPrivateMethod () {privateMethod (); // alleen beschikbaar in dezelfde klasse. }}

Dit meer gedetailleerde artikel laat zien hoe de privaat trefwoord gedraagt ​​zich wanneer toegepast op een veld, constructor, methode en op een innerlijke klasse.

5. Beschermd

Tussen openbaar en privaat toegangsniveaus, er is de beschermd toegangsmodificator.

Als we een methode, eigenschap of constructor declareren met de beschermd trefwoord, hebben we toegang tot het lid via de hetzelfde pakket (als bij pakket-privé toegangsniveau) en bovendien uit alle subklassen van zijn klasse, zelfs als ze in andere pakketten liggen:

pakket com.baeldung.accessmodifiers; openbare klasse SuperPublic {statisch beschermd ongeldig protectedMethod () {...}}

protectedMethod () is beschikbaar in subklassen (ongeacht het pakket):

pakket com.baeldung.accessmodifiers.another; importeer com.baeldung.accessmodifiers.SuperPublic; openbare klasse AnotherSubClass breidt SuperPublic {openbare AnotherSubClass () {SuperPublic.protectedMethod () uit; // Beschikbaar in subklasse. Laten we een ander pakket opmerken. }}

Het speciale artikel beschrijft meer over het sleutelwoord bij gebruik in een veld, methode, constructor, inner class en de toegankelijkheid in hetzelfde pakket of een ander pakket.

6. Vergelijking

De onderstaande tabel geeft een overzicht van de beschikbare toegangsmodificatoren. We kunnen zien dat een klasse, ongeacht de gebruikte toegangsmodificatoren, altijd toegang heeft tot zijn leden:

ModificatorKlassePakketSubklasseWereld
openbaar
YYYY
beschermd
YYYN
standaard
YYNN
privaat
YNNN

7. Conclusie

In dit korte artikel hebben we de toegangsmodificatoren in Java besproken.

Het is een goede gewoonte om het meest beperkende toegangsniveau te gebruiken dat voor een bepaald lid mogelijk is om misbruik te voorkomen. We moeten altijd de privaat access modifier tenzij er een goede reden is om dit niet te doen.

Openbaar toegangsniveau mag alleen worden gebruikt als een lid deel uitmaakt van een API.

Zoals altijd zijn de codevoorbeelden beschikbaar op Github.