I java Java finnes det flere synlighetsmodifikatorer som gir mulighet til å styre "tilgangen" til klasser, variabler, metoder og konstruktører. For mer om hvorfor vi ønsker å styre denne "tilgangen", se Innkapsling.
Vi har fire nivåer for tilgjengelighet:
- Synlig i pakken (package) er standardverdi og trenger ingen modifikatorfor alle, public
- Synlig kun i klassen, private
- Synlig for alle, publici pakken (default), er standardverdi og trenger ingen modifikator
- Synlig i pakken og for subklasser, protected
...
Dersom man deklarerer et felt, en metode etc. som private, er det kun mulig å hente/forandre/kalle på denne ressursen direkte i klassen.
Merk at verdiene til private felt fortsatt kan hentes gjennom en en getter eller forandres med en setter.
|
|
---|
...
Default
Dersom man deklarerer et felt, en metode etc. uten synlighetsmodifikator, tildeles standardverdien. Dette gjør ressursen tilgjengelig for alle klasser som ligger i samme package.
...
Eksempelet under krever kjennskap til til begrepet arv.
|
|
---|
Dersom Painter har et default felt,metode,etc. her, vil ikke Roompainter kunne nå denne ressursen, fordi klassene ikke er i samme package.
Synlighet ved arv
Det finnes i java et sett med regler for synlighet ved arv
- Metoder som deklareres som public i superklassen, må også være public i subklasser
Metoder som deklareres som protected i en superklasse må enten være protected eller public i subklasser; det er ikke mulig å redusere synlighet til private.
Metoder deklarert uten synlighetsmodifikator (default) kan deklareres mer skjult i subklasser
Metoder som deklareres private arves ikke i det hele tatt, så det er ingen regler for disse.