Modifikátory viditeľnosti

<< Balíčky | Obsah | Triedenie >>

Vidieľnosť tried, metód a inštančných premenných sa dá nastavovať pomocou modifikátorov vidieľnosti. Platí, že ak niečo nevidíme, nevieme s tým pracovať priamo. Nevidieľná trieda sa prejavuje tak, že nevieme vytvárať premenné typu tejto triedy ani objekty tejto triedy z miesta, kde triedu nevidíme. Neviditeľné metódy nevieme z danúho miesta zavolať a neviditeľné inštančné premenné priamo meniť.

Triedy, ktoré majú vlastný súbor s rovnakým menom, môžu mať dva typy modifikátorov:

  • public - viditeľné všade,
public class NejakaVerejnaTrieda {
...
}
  • (nič) - viditeľné iba v svojom balíčku, t.j. neviditeľné vo všetkých iných balíčkoch aj podbalíčkoch
class NejakaTrieda {
...
}

To, čo sa nachádza v týchto triedach, teda inštančné premenné a metódy (časom možno narazíte aj na vnorené triedy) majú možnosť mať jeden zo 4 rôznych modifikátorov viditeľnosti

  • public - viditeľné všade,
public int verejnáPremenná;
...
public void verejnáMetóda(){
}
  • protected - viditeľné v svojom balíčku a vo všetkých potomkoch aj keby boli z iných balíčkov
protected int chránenáPremenná;
...
protected void chránenáMetóda(){
}
  • (nič) - viditeľné iba v svojom balíčku
int balíčkováPremenná;
...
void balíčkováMetóda(){
}
  • private - viditeľné iba vo svojej triede
private int súkromnáPremenná;
...
private void súkromnáMetóda(){
}

Nasledujúca tabuľka ukazuje prehľad dostupnosti (viditeľnosti) k prvkom triedy pre daný modifikátor viditeľnosti

ModifikátorTriedaPackagePodtriedaVšade
publicánoánoánoáno
protectedánoánoánonie
(nič)ánoánonienie
privateánonienienie

To, aký modifikátor použiť, záleží od konkrétneho návrhu. V reálnom projekte platí, že modifikátory by mali byť čo najprísnejšie. Začíname s private a iba keď máme dobrý dôvod, nastavujeme voľnejšie modifikátory.

Modifikátor public by mali mať iba tie metódy, ktoré poskytujeme iným programátorom a používateľom nášho programu. Typicky sú to metódy zo zadania, t.j. inferfejsu, ktorý má všetky metódy public aj keď to nenapíšeme.