Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Private-modificator | Geavanceerde Klassen
Java Uitgebreid
course content

Cursusinhoud

Java Uitgebreid

Java Uitgebreid

1. Diepe Java-structuur
2. Methoden
3. String Geavanceerd
4. Klassen
5. Geavanceerde Klassen

book
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

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; }

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

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; } }

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

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 + '\'' + '}'; } }

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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 5. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

course content

Cursusinhoud

Java Uitgebreid

Java Uitgebreid

1. Diepe Java-structuur
2. Methoden
3. String Geavanceerd
4. Klassen
5. Geavanceerde Klassen

book
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

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; }

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

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; } }

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

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 + '\'' + '}'; } }

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.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 5. Hoofdstuk 3
some-alt