Cursusinhoud
Java Uitgebreid
Java Uitgebreid
Private-modificator
Hoe velden en methoden verbergen voor een andere klasse?
Toegangsmodificatoren worden gebruikt om de zichtbaarheid en toegankelijkheid van variabelen en methoden in Java te regelen. Hiermee kunnen we het bereik definiëren en de toegang tot bepaalde leden van een klasse beperken.
We hebben toegangsmodificatoren al besproken in de vorige sectie. Nu bekijken we de meest gebruikte toegangsmodificator - private
- nader.
Zoals je weet, kunnen we met de private
toegangsmodificator een veld/methode alleen benaderen vanuit de klasse waarin deze zich bevindt. Laten we een voorbeeld bekijken van het gebruik van de private
modificator:
Als we bijvoorbeeld niet willen dat een variabele in de ene klasse zichtbaar of toegankelijk is voor een andere klasse, kunnen we de private
toegangsmodificator gebruiken:
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; }
We hebben de velden van de klasse Person
als private
gedeclareerd. Wanneer we proberen het veld direct te initialiseren, ontvangen we een foutmelding die aangeeft dat het name
-veld een private
access modifier heeft en niet toegankelijk is voor aanroepen of wijzigingen in de main-methode.
Hoe een privaat veld initialiseren?
De eenvoudigste manier om de bescherming te omzeilen is initialisatie via een constructor. Op deze manier kunnen we alleen de velden van objecten initialiseren, maar deze velden niet benaderen. Laten we een voorbeeld bekijken:
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; } }
We konden het name
-veld initialiseren via de constructor, maar we kunnen dit veld nog steeds niet benaderen en afdrukken met System.out.println()
. Om dit te omzeilen, kunnen we de toString()
-methode overschrijven zodat wanneer we System.out.println(bob);
aanroepen, informatie over de velden wordt weergegeven.
Laten we een voorbeeld bekijken:
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 + '\'' + '}'; } }
We zijn er uiteindelijk in geslaagd om de waarde van het veld name
van het bob
-object weer te geven. Dit hebben we bereikt door gebruik te maken van de overschreven toString()
-methode, waarin we de logica voor het weergeven van de name
hebben geïmplementeerd.
De vraag rijst waarom we deze access modifier nodig hebben als we zoveel extra code moeten schrijven?
Soms zijn er in verschillende klassen variabelen met dezelfde naam, en in dergelijke gevallen is het noodzakelijk om de variabelen van deze klassen te verbergen zodat andere klassen geen toegang hebben tot onnodige velden. Dit verbetert het gemak van het schrijven van code aanzienlijk wanneer je begrijpt welk veld bij welke klasse hoort.
Bedankt voor je feedback!