Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Privat-modifikator | Avanserte Klasser
Java Utvidet
course content

Kursinnhold

Java Utvidet

Java Utvidet

1. Dyp Java-struktur
2. Metoder
3. Avansert Streng
4. Klasser
5. Avanserte Klasser

book
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

Main.java

copy
123456789101112131415
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

Main.java

copy
123456789101112131415161718
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

Main.java

copy
1234567891011121314151617181920212223
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.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

Java Utvidet

Java Utvidet

1. Dyp Java-struktur
2. Metoder
3. Avansert Streng
4. Klasser
5. Avanserte Klasser

book
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

Main.java

copy
123456789101112131415
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

Main.java

copy
123456789101112131415161718
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

Main.java

copy
1234567891011121314151617181920212223
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.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 3
some-alt