Kursinnhold
Java Utvidet
Java Utvidet
Privat-modifikator
Hvordan skjule felt og metoder fra en annen klasse?
Tilgangsmodifikatorer brukes til å kontrollere synlighet og tilgjengelighet for variabler og metoder i Java. De lar oss definere omfanget og begrense tilgangen til bestemte medlemmer av en klasse.
Vi har allerede diskutert tilgangsmodifikatorer i forrige seksjon. Nå skal vi se nærmere på den mest brukte tilgangsmodifikatoren – private
.
Som du vet, med tilgangsmodifikatoren private
, kan vi kun få tilgang til et felt/metode fra klassen der det er definert. La oss se på et eksempel på bruk av private
-modifikatoren:
For eksempel, hvis vi ikke ønsker at en variabel i én klasse skal være synlig eller tilgjengelig for en annen klasse, kan vi bruke tilgangsmodifikatoren private
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }
Vi har erklært feltene i Person
-klassen som private
. Når vi prøver å initialisere feltet direkte, får vi en feil som indikerer at name
-feltet har en private
tilgangsmodifikator og ikke er tilgjengelig for kall eller endring i main-metoden.
Hvordan initialisere et privat felt?
Den enkleste måten å omgå beskyttelsen på er å bruke initialisering gjennom en konstruktør. På denne måten kan vi kun initialisere feltene til objektene, men ikke få tilgang til disse feltene. La oss se på et eksempel:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }
Vi klarte å initialisere name
-feltet gjennom konstruktøren, men vi kan fortsatt ikke få tilgang til dette feltet og skrive det ut med System.out.println()
. For å omgå dette kan vi overstyre toString()
-metoden slik at når vi kaller System.out.println(bob);
, vises informasjon om feltene.
La oss se på et eksempel:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
Vi klarte endelig å vise verdien til name
-feltet i bob
-objektet. Dette oppnådde vi ved å bruke den overstyrte toString()
-metoden, hvor vi implementerte logikken for å vise name
.
Spørsmålet oppstår: Hvorfor trenger vi denne tilgangsmodifikatoren hvis vi må skrive så mye ekstra kode?
Noen ganger finnes det variabler med samme navn i ulike klasser, og i slike tilfeller er det nødvendig å skjule variablene i disse klassene slik at andre klasser ikke får tilgang til unødvendige felt. Dette forbedrer i stor grad oversikten og gjør det enklere å skrive kode, fordi du forstår hvilket felt som tilhører hvilken klasse.
Takk for tilbakemeldingene dine!