Java 'privat' adgangsmodifikator

1. Oversigt

I programmeringssproget Java kan felter, konstruktører, metoder og klasser markeres med adgangsmodifikatorer. I denne vejledning vil vi tale om privat adgangsmodifikator i Java.

2. Nøgleordet

Det privat adgangsmodifikator er vigtig, fordi det tillader indkapsling og skjulning af information, som er kerneprincipper for objektorienteret programmering. Indkapsling er ansvarlig for bundtning af metoder og data, mens informations skjul er en konsekvens af indkapsling - det skjuler et objekts interne repræsentation.

Den første ting at huske er, at elementer erklæret som privat kun adgang til den klasse, hvori de er erklæret.

3. Felter

Nu ser vi nogle enkle kodeeksempler for bedre at forstå emnet.

Lad os først oprette en Medarbejder klasse indeholdende et par privat instansvariabler:

offentlig klassemedarbejder {privat streng privat-id; privat boolsk manager; // ...}

I dette eksempel markerede vi privateId variabel som privat fordi vi ønsker at tilføje logik til id-generationen. Og som vi kan se, gjorde vi det samme med Manager attribut, fordi vi ikke vil tillade direkte ændring af dette felt.

4. Konstruktører

Lad os nu oprette en privat konstruktør:

privat medarbejder (String id, String name, boolean managerAttribute) {this.name = name; this.privateId = id + "_ID-MANAGER"; }

Ved at markere vores konstruktør som privat, vi kan kun bruge det inde fra vores klasse.

Lad os tilføje en statisk metode, der vil være vores eneste måde at bruge dette på privat konstruktør uden for Medarbejder klasse:

offentlig statisk ansat buildManager (streng-id, strengnavn) {returner ny medarbejder (id, navn, sandt); }

Nu kan vi få en managerinstans af vores Medarbejder klasse ved blot at skrive:

Medarbejderleder = Employee.buildManager ("123MAN", "Bob");

Og bag kulisserne naturligvis buildManager metode kalder vores privat konstruktør.

5. Metoder

Lad os nu tilføje en privat metode til vores klasse:

privat ugyldigt setManager (boolsk manager) {this.manager = manager; }

Og lad os antage, at vi af en eller anden grund har en vilkårlig regel i vores virksomhed, hvor kun en medarbejder ved navn ”Carl” kan forfremmes til leder, selvom andre klasser ikke er opmærksomme på dette. Vi opretter en offentlig metode med en vis logik til at håndtere denne regel, der kalder vores privat metode:

public void elevateToManager () {if ("Carl" .equals (this.name)) {setManager (true); }}

6. privat i aktion

Lad os se et eksempel på, hvordan vi bruger vores Medarbejder klasse udefra:

offentlig klasse ExampleClass {public static void main (String [] args) {Medarbejdermedarbejder = ny medarbejder ("Bob", "ABC123"); medarbejder.setPrivateId ("BCD234"); System.out.println (medarbejder.getPrivateId ()); }}

Efter udførelse Eksempelklasse, vi ser dens output på konsollen:

BCD234_ID

I dette eksempel brugte vi offentlig konstruktør og offentlig metode changeId (customId) fordi vi ikke kan få adgang til privat variabel privateId direkte.

Lad os se hvad sker der, hvis vi forsøger at få adgang til en privat metode, konstruktør eller variabel uden for vores Medarbejder klasse:

public class ExampleClass {public static void main (String [] args) {Medarbejdermedarbejder = ny medarbejder ("Bob", "ABC123", sand); medarbejder.setManager (sand); medarbejder.privateId = "ABC234"; }}

Vi får kompileringsfejl for hver af vores ulovlige erklæringer:

Konstruktøren Medarbejder (streng, streng, boolsk) er ikke synlig Metoden setManager (boolsk) fra typen Medarbejder er ikke synlig Feltet Medarbejder.privateId er ikke synlig

7. Klasser

Der er et specielt tilfælde, hvor vi kan oprette en privat klasse - som en indre klasse i en anden klasse. Ellers hvis vi skulle erklære en ydre klasse som privat, ville vi forbyde andre klasser at få adgang til det, hvilket gør det ubrugeligt:

offentlig klasse PublicOuterClass {public PrivateInnerClass getInnerClassInstance () {PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass (); myPrivateClassInstance.id = "ID1"; myPrivateClassInstance.name = "Bob"; returner myPrivateClassInstance; } privat klasse PrivateInnerClass {public String name; offentlig streng-id; }}

I dette eksempel oprettede vi en privat indre klasse inde i vores PublicOuterClass ved at specificere privat adgangsmodifikator.

Fordi vi brugte privat nøgleord, hvis vi af en eller anden grund prøv at instantiere vores PrivateInnerClass uden for PublicOuterClass, koden kompileres ikke, og vi får vist fejlen:

PrivateInnerClass kan ikke løses til en type

8. Konklusion

I denne hurtige vejledning har vi diskuteret privat adgangsmodifikator i Java. Det er en god måde at opnå indkapsling på, hvilket fører til skjult information. Som et resultat kan vi sikre, at vi kun udsætter de data og adfærd, vi ønsker for andre klasser.

Som altid er kodeeksemplet tilgængeligt på GitHub.