Adgangsmodifikatorer styrer synligheden af klassens medlemmer, hvilket håndhæver indkapsling ved at begrænse, hvem der kan læse eller kalde dem.
Adgangsmodifikatorer styrer synligheden af klassens medlemmer, hvilket håndhæver indkapsling ved at begrænse, hvem der kan læse eller kalde dem.
| Modifier | Accessible from |
|---|
public | Hvor som helst |
protected | Klassen og dens underklasser |
private | Kun inden for den deklarerende klasse |
public class Employee {
private double salary; // internal — only Employee touches it
protected String department; // subclasses may use it
public String name; // open to all
public double getSalary() { // controlled, public read access
return salary;
}
}
salary er private, så ingen ekstern kode kan beskadige den; det offentlige getter er det eneste vindue.
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # convention only ("don't touch")
self.__private = 3 # name-mangled to _Demo__private
Python har ingen tvungen private — det er afhængig af navnekonventioner. Java/C# håndhæver modifikatorer på kompileringstidspunktet. Java har også package-private (standarden, uden nøgleord).
At gøre alt public underminerer indkapsling. Start med det mest restriktive niveau og udvid kun når et reelt behov opstår.
Adgangsmodifikatorer er det konkrete værktøj, der gør indkapsling fra et princip til en regel, som compileren håndhæver.
Et lille offentligt overfladeareal betyder, at mindre kode kan afhænge af internals, så du kan refaktorere frit uden at bryde opkaldere.