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 - van dichterbij.
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
123456789101112131415package 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 veld name een private toegangsmodificator heeft en niet toegankelijk is voor aanroepen of wijzigingen in de main-methode.
Hoe een privéveld initialiseren
De eenvoudigste manier om de bescherming te omzeilen is door initialisatie via een constructor. Op deze manier kunnen we alleen de velden van objecten initialiseren, maar niet deze velden benaderen. Laten we een voorbeeld bekijken:
Main.java
123456789101112131415161718package 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 veld name initialiseren via de constructor, maar we kunnen nog steeds geen toegang krijgen tot dit veld en het afdrukken met System.out.println(). Om dit te omzeilen, kunnen we de methode toString() overschrijven zodat wanneer we System.out.println(bob); aanroepen, informatie over de velden wordt weergegeven.
Laten we een voorbeeld bekijken:
Main.java
1234567891011121314151617181920212223package 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 object bob weer te geven. Dit hebben we bereikt door gebruik te maken van de overriden 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 te verbergen van deze klassen, 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!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 2.63
Private-modificator
Veeg om het menu te tonen
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 - van dichterbij.
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
123456789101112131415package 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 veld name een private toegangsmodificator heeft en niet toegankelijk is voor aanroepen of wijzigingen in de main-methode.
Hoe een privéveld initialiseren
De eenvoudigste manier om de bescherming te omzeilen is door initialisatie via een constructor. Op deze manier kunnen we alleen de velden van objecten initialiseren, maar niet deze velden benaderen. Laten we een voorbeeld bekijken:
Main.java
123456789101112131415161718package 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 veld name initialiseren via de constructor, maar we kunnen nog steeds geen toegang krijgen tot dit veld en het afdrukken met System.out.println(). Om dit te omzeilen, kunnen we de methode toString() overschrijven zodat wanneer we System.out.println(bob); aanroepen, informatie over de velden wordt weergegeven.
Laten we een voorbeeld bekijken:
Main.java
1234567891011121314151617181920212223package 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 object bob weer te geven. Dit hebben we bereikt door gebruik te maken van de overriden 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 te verbergen van deze klassen, 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!