Kursusindhold
Java Udvidet
Java Udvidet
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
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
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
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.
Tak for dine kommentarer!