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
123456789101112131415package 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
123456789101112131415161718package 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
1234567891011121314151617181920212223package 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!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 2.63
Privat-modifikator
Sveip for å vise menyen
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
123456789101112131415package 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
123456789101112131415161718package 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
1234567891011121314151617181920212223package 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!