Kursinnehåll
Java Fördjupad
Java Fördjupad
Privat Modifierare
Hur döljer man fält och metoder från en annan klass?
Åtkomstmodifierare används för att kontrollera synlighet och åtkomst till variabler och metoder i Java. De gör det möjligt att definiera omfång och begränsa åtkomst till vissa medlemmar i en klass.
Vi har redan diskuterat åtkomstmodifierare i föregående avsnitt. Nu ska vi titta närmare på den mest använda åtkomstmodifieraren - private
.
Som du vet kan vi med åtkomstmodifieraren private
endast komma åt ett fält/metod från den klass där det är deklarerat. Låt oss titta på ett exempel på användning av private
-modifieraren:
Om vi till exempel inte vill att en variabel i en klass ska vara synlig eller åtkomlig för en annan klass, kan vi använda åtkomstmodifieraren 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 deklarerat fälten i klassen Person
som private
. När vi försöker initiera fältet direkt, får vi ett felmeddelande som indikerar att fältet name
har en private
åtkomstmodifierare och inte är tillgängligt för anrop eller modifiering i huvudmetoden.
Hur initierar man ett privat fält?
Det enklaste sättet att kringgå skyddet är att använda initiering via en konstruktor. Med detta tillvägagångssätt kan vi endast initiera objektens fält men inte komma åt dessa fält. Låt oss titta på ett exempel:
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 kunde initiera fältet name
via konstruktorn, men vi kan fortfarande inte komma åt detta fält och skriva ut det med System.out.println()
. För att kringgå detta kan vi överskrida metoden toString()
så att när vi anropar System.out.println(bob);
visas information om dess fält.
Låt oss titta på ett exempel:
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 lyckades till slut visa värdet av fältet name
för objektet bob
. Detta uppnådde vi genom att använda den överskuggade metoden toString()
, där vi implementerade logiken för att visa name
.
Frågan uppstår, varför behöver vi denna åtkomstmodifierare om vi måste skriva så mycket extra kod?
Ibland finns det variabler med samma namn i olika klasser, och i sådana fall är det nödvändigt att dölja variablerna i dessa klasser så att andra klasser inte får åtkomst till onödiga fält. Detta förbättrar avsevärt bekvämligheten vid kodskrivning i allmänhet när du förstår vilket fält som tillhör vilken klass.
Tack för dina kommentarer!