Java-toegangsmodificaties begrijpen: typen, regels en praktische voorbeelden
Java-toegangsmodificaties
Deze tutorial verkent Java-toegangsmodificaties, hun vier typen en demonstreert hun gebruik door duidelijke voorbeelden.
Wat zijn toegangsmodificaties?
In Java definiëren toegangsmodificaties de zichtbaarheid van klassen, interfaces, variabelen, methoden, constructors en dataleden. Bijvoorbeeld:
class Dier { public void methode1() {...} private void methode2() {...} }
In het bovenstaande voorbeeld is methode1 public – toegankelijk vanuit elke klasse. methode2 is private – beperkt tot de omringende klasse.
Deze trefwoorden – public en private – zijn de kern zichtbaarheidsmodificaties in Java.
Let op: Getter-methoden zelf kunnen niet worden gedeclareerd met een toegangsmodificatie.
Typen toegangsmodificaties
Voordat we in de modificaties duiken, zorg dat je Java-pakketten begrijpt.
Java biedt vier primaire zichtbaarheidsmodificaties:
| Modificatie | Beschrijving |
|---|---|
| Standaard (pakket-privé) | Alleen zichtbaar binnen hetzelfde pakket. |
| Private | Alleen zichtbaar binnen de declarerende klasse. |
| Protected | Zichtbaar binnen het pakket en voor subklassen in andere pakketten. |
| Public | Overal zichtbaar. |
Standaard toegangsmodificatie
Wanneer geen modificatie is opgepast, past Java de standaard (pakket-privé) zichtbaarheid toe. Bijvoorbeeld:
package standaardPakket; class Logger { void bericht() { System.out.println("Dit is een bericht"); } }
De Logger-klasse is alleen toegankelijk voor klassen binnen standaardPakket. Het gebruiken vanuit een ander pakket resulteert in een compilatiefout.
Private toegangsmodificatie
Het declareren van een lid als private beperkt de toegang tot de bevattende klasse:
class Data { private String naam; } public class Main { public static void main(String[] args) { Data d = new Data(); d.naam = "Programiz"; // ❌ compileerfout } }
De fout treedt op omdat naam privé is voor Data. Om het veilig bloot te leggen, bied toegangsmethoden aan:
class Data { private String naam; public String getNaam() { return this.naam; } public void setNaam(String naam) { this.naam = naam; } } public class Main { public static void main(String[] args) { Data d = new Data(); d.setNaam("Programiz"); System.out.println(d.getNaam()); } }
Uitvoer:
De naam is Programiz
Let op dat geneste klassen private kunnen worden gedeclareerd, maar top-level klassen en interfaces niet.
Let op: Java staat niet toe dat top-level klassen of interfaces private zijn.
Protected toegangsmodificatie
Leden gemarkeerd als protected zijn zichtbaar binnen hetzelfde pakket en voor subklassen in andere pakketten. Voorbeeld:
class Dier { protected void toon() { System.out.println("Ik ben een dier"); } } class Hond extends Dier { public static void main(String[] args) { Hond hond = new Hond(); hond.toon(); // ✅ toegestaan } }
Uitvoer:
Ik ben een dier
Protected leden kunnen niet worden gedeclareerd op top-level klassen of interfaces.
Let op: Top-level klassen en interfaces kunnen niet protected zijn.
Public toegangsmodificatie
Leden gedeclareerd als public zijn universeel toegankelijk:
// Dier.java public class Dier { public int pootAantal; public void toon() { System.out.println("Ik ben een dier."); System.out.println("Ik heb " + pootAantal + " poten."); } } // Main.java public class Main { public static void main(String[] args) { Dier dier = new Dier(); dier.pootAantal = 4; dier.toon(); } }
Uitvoer:
Ik ben een dier. Ik heb 4 poten.
Samenvatting: Dier (public klasse), pootAantal (public veld) en toon() (public methode) zijn allemaal toegankelijk vanuit Main.
Toegangsmodificaties samengevat in één figuur

Toegangsmodificaties vormen de basis van encapsulatie, waardoor ontwikkelaars zichtbaarheid kunnen controleren en dataintegriteit beschermen. Meer over encapsulatie vind je bij Java Encapsulatie.
Java
- C# Access Modifiers: Public, Private, Protected, Internal en Meer
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList