Java ‘privat’ Access Modifier

1. Oversikt

På programmeringsspråket Java kan felt, konstruktører, metoder og klasser merkes med tilgangsmodifikatorer. I denne opplæringen vil vi snakke om privat tilgangsmodifikator i Java.

2. Nøkkelordet

De privat tilgangsmodifikator er viktig fordi det tillater innkapsling og skjuling av informasjon, som er hovedprinsippene for objektorientert programmering. Innkapsling er ansvarlig for å samle metoder og data, mens skjuling av informasjon er en konsekvens av innkapsling - den skjuler et objekts interne representasjon.

Det første du må huske er at elementer erklært som privat kan bare nås av klassen de er erklært for.

3. Felter

Nå ser vi noen enkle kodeeksempler for bedre å forstå emnet.

La oss først lage en Ansatt klasse som inneholder et par privat forekomstvariabler:

offentlig klasse Ansatt {private String privateId; privat boolsk leder; // ...}

I dette eksemplet markerte vi privateId variabel som privat fordi vi ønsker å legge til litt logikk i id-generasjonen. Og som vi kan se, gjorde vi det samme med sjef attributt fordi vi ikke vil tillate direkte modifisering av dette feltet.

4. Konstruktører

La oss nå lage en privat konstruktør:

privat ansatt (streng-id, strengnavn, boolsk managerattributt) {this.name = navn; this.privateId = id + "_ID-MANAGER"; }

Ved å merke konstruktøren vår som privat, vi kan bare bruke den fra klassen vår.

La oss legge til en statisk metode som vil være vår eneste måte å bruke dette på privat konstruktør utenfor Ansatt klasse:

offentlig statisk ansatt buildManager (streng-id, strengnavn) {returner ny ansatt (id, navn, sant); }

Nå kan vi få en lederinstans av vår Ansatt klasse ved å skrive:

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

Og bak kulissene, selvfølgelig, buildManager metoden kaller vår privat konstruktør.

5. Metoder

La oss nå legge til en privat metode til vår klasse:

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

Og la oss anta at vi av en eller annen grunn har en vilkårlig regel i vårt selskap der bare en ansatt ved navn “Carl” kan forfremmes til leder, selv om andre klasser ikke er klar over dette. Vi lager en offentlig metode med litt logikk for å håndtere denne regelen som kaller vår privat metode:

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

6. privat i aksjon

La oss se et eksempel på hvordan du bruker vår Ansatt klasse utenfra:

offentlig klasse Eksempelklasse {offentlig statisk ugyldig hoved (String [] args) {Ansatt ansatt = ny ansatt ("Bob", "ABC123"); ansatte.setPrivateId ("BCD234"); System.out.println (medarbeider.getPrivateId ()); }}

Etter utførelse Eksempelklasse, ser vi utdataene på konsollen:

BCD234_ID

I dette eksemplet brukte vi offentlig konstruktør og offentlig metode changeId (customId) fordi vi ikke får tilgang til privat variabel privateId direkte.

La oss se hva skjer hvis vi prøver å få tilgang til a privat metode, konstruktør eller variabel fra utenfor vår Ansatt klasse:

offentlig klasse Eksempelklasse {offentlig statisk ugyldig hoved (String [] args) {Ansatt ansatt = ny ansatt ("Bob", "ABC123", sant); ansatt.setManager (sant); ansatt.privateId = "ABC234"; }}

Vi får kompileringsfeil for hver av våre ulovlige uttalelser:

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

7. Klasser

Det er et spesielt tilfelle der vi kan lage en privat klasse - som en indre klasse i en annen klasse. Ellers hvis vi skulle erklære en ytre klasse som privat, ville vi forby andre klasser å få tilgang til det, noe som gjør det ubrukelig:

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

I dette eksemplet opprettet vi en privat indre klasse inne i vår PublicOuterClass ved å spesifisere privat tilgangsmodifikator.

Fordi vi brukte privat søkeord, hvis vi av en eller annen grunn, prøv å øyeblikkeliggjøre vår PrivateInnerClass fra utenfor PublicOuterClass, koden kompileres ikke, og vi får se feilen:

PrivateInnerClass kan ikke løses til en type

8. Konklusjon

I denne raske opplæringen har vi diskutert privat tilgangsmodifikator i Java. Det er en god måte å oppnå innkapsling på, noe som fører til skjuling av informasjon. Som et resultat kan vi sikre at vi bare eksponerer data og atferd vi ønsker for andre klasser.

Som alltid er kodeeksemplet tilgjengelig på GitHub.