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

Kursusindhold

Java Udvidet

Java Udvidet

1. Dyb Java-Struktur
2. Metoder
3. String Avanceret
4. Klasser
5. Avancerede Klasser

book
Privat-modifikator

Hvordan skjules felter og metoder for en anden klasse?

Adgangsmodifikatorer bruges til at kontrollere synligheden og tilgængeligheden af variabler og metoder i Java. De gør det muligt at definere omfanget og begrænse adgangen til bestemte medlemmer af en klasse.

Vi har allerede diskuteret adgangsmodifikatorer i det forrige afsnit. Lad os nu se nærmere på den mest anvendte adgangsmodifikator - private.

Som du ved, kan vi med adgangsmodifikatoren private kun få adgang til et felt/metode fra den klasse, hvor det er placeret. Lad os se et eksempel på brugen af private-modifikatoren:

Hvis vi for eksempel ikke ønsker, at en variabel i én klasse skal være synlig eller tilgængelig for en anden klasse, kan vi bruge adgangsmodifikatoren 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æret felterne i Person-klassen som private. Når vi forsøger at initialisere feltet direkte, får vi en fejl, der angiver, at name-feltet har en private adgangsmodifikator og ikke er tilgængelig for kald eller ændring i main-metoden.

Hvordan initialiseres et privat felt?

Den enkleste måde at omgå beskyttelsen på er at bruge initialisering gennem en konstruktør. På denne måde kan vi kun initialisere objekternes felter, men ikke tilgå disse felter. Lad os se 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 kunne initialisere name-feltet gennem konstruktøren, men vi kan stadig ikke tilgå dette felt og udskrive det med System.out.println(). For at omgå dette kan vi overskrive toString()-metoden, så når vi kalder System.out.println(bob);, vises information om dets felter. Lad os se 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 har endelig formået at vise værdien af name-feltet for bob-objektet. Dette opnåede vi ved at bruge den overskrevne toString()-metode, hvor vi implementerede logikken for visning af name.

Spørgsmålet opstår, hvorfor har vi brug for denne adgangsmodifikator, hvis vi skal skrive så meget ekstra kode?

Nogle gange findes der variabler med samme navn i forskellige klasser, og i sådanne tilfælde er det nødvendigt at skjule variablerne i disse klasser, så andre klasser ikke får adgang til unødvendige felter. Dette forbedrer markant bekvemmeligheden ved at skrive kode generelt, når man forstår, hvilket felt der tilhører hvilken klasse.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

course content

Kursusindhold

Java Udvidet

Java Udvidet

1. Dyb Java-Struktur
2. Metoder
3. String Avanceret
4. Klasser
5. Avancerede Klasser

book
Privat-modifikator

Hvordan skjules felter og metoder for en anden klasse?

Adgangsmodifikatorer bruges til at kontrollere synligheden og tilgængeligheden af variabler og metoder i Java. De gør det muligt at definere omfanget og begrænse adgangen til bestemte medlemmer af en klasse.

Vi har allerede diskuteret adgangsmodifikatorer i det forrige afsnit. Lad os nu se nærmere på den mest anvendte adgangsmodifikator - private.

Som du ved, kan vi med adgangsmodifikatoren private kun få adgang til et felt/metode fra den klasse, hvor det er placeret. Lad os se et eksempel på brugen af private-modifikatoren:

Hvis vi for eksempel ikke ønsker, at en variabel i én klasse skal være synlig eller tilgængelig for en anden klasse, kan vi bruge adgangsmodifikatoren 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æret felterne i Person-klassen som private. Når vi forsøger at initialisere feltet direkte, får vi en fejl, der angiver, at name-feltet har en private adgangsmodifikator og ikke er tilgængelig for kald eller ændring i main-metoden.

Hvordan initialiseres et privat felt?

Den enkleste måde at omgå beskyttelsen på er at bruge initialisering gennem en konstruktør. På denne måde kan vi kun initialisere objekternes felter, men ikke tilgå disse felter. Lad os se 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 kunne initialisere name-feltet gennem konstruktøren, men vi kan stadig ikke tilgå dette felt og udskrive det med System.out.println(). For at omgå dette kan vi overskrive toString()-metoden, så når vi kalder System.out.println(bob);, vises information om dets felter. Lad os se 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 har endelig formået at vise værdien af name-feltet for bob-objektet. Dette opnåede vi ved at bruge den overskrevne toString()-metode, hvor vi implementerede logikken for visning af name.

Spørgsmålet opstår, hvorfor har vi brug for denne adgangsmodifikator, hvis vi skal skrive så meget ekstra kode?

Nogle gange findes der variabler med samme navn i forskellige klasser, og i sådanne tilfælde er det nødvendigt at skjule variablerne i disse klasser, så andre klasser ikke får adgang til unødvendige felter. Dette forbedrer markant bekvemmeligheden ved at skrive kode generelt, når man forstår, hvilket felt der tilhører hvilken klasse.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 5. Kapitel 3
some-alt