Specificatori de acces

Specificatorii de acces sunt cuvinte rezervate java folosite pentru a controla accesul asupra claselor şi membrilor claselor (atribute şi metode). În java există patru specificatori de acces:

  • private
  • protected
  • public
  • package

Specificatorul de acces package

Un membru al unei clase ce nu are setat nici unul din specificatorii de acces private, protected sau public are nivelul de acces package (acces de pachet). Aceasta înseamnă că acest membru poate fi accesat de către toate clasele din acelaşi pachet cu clasa ce conţine acest membru. Clasele din alte pachete nu au acces la membrii cu specificator de acces package.

Specificatorul de acces public

Un membru ce are specificator de acces public poate fi accesat din cadrul oricărei clase indiferent de localizarea acesteia – chiar dacă face parte din acelaşi pachet cu membrul public sau din alt pachet.

Specificatorul de acces private

Un membru cu specificator de acces private nu este accesibil decât din interiorul clasei în care este definit. Un membru private nu este accesibil din cadrul claselor din acelaşi pachet.

Specificatorul de acces protected

Membrii protected sunt accesibili din cadrul aceluiaşi pachet (nivel de acces similar cu cel de pachet) dar în plus sunt accesibili şi din cadrul claselor din alte pachete care moştenesc clasa ce conţine membrul protected. Se va reveni asupra acestui specificator de acces în momentul în care se va prezenta în detaliu noţiunea de moştenire (este vorba de operaţia de construirea unei clase plecând de la o clasă existentă prin adăugarea de caracteristici suplimentare).

Exemplu aplicatie cu specificatori de acces

package robot.machine;
public class Robot {
            Engine robotEngine;
            public Robot(){
                        robotEngine = new Engine();
            }
 
            public void moveRobot(int x){
                        robotEngine.step(x);
            }
 
}
 
package robot.machine;
class Engine {
            void step(int x) {
                        start();
                        checkDirection(x);
                        execute(x);
                        stop();
            }
 
            private void start(){
                        System.out.println("Start engine.");
            }
            private void stop(){
                        System.out.println("Stop engine.");
            }
 
            private void checkDirection(int x){
                        if(x<0)
                                    System.out.println("Moving to the left.");
                        else if(x>0)
                                    System.out.println("Moving to the right.");
            }
 
            private void execute(int s){
                        System.out.println("Moving "+Math.abs(s)+" steps.");
            }
 
}
 
 
 
package robot.play;
import robot.machine.Robot;
public class BattleField {
            Robot r1;
            Robot r2;
 
            BattleField(){
                        r1 = new Robot();
                        r2 = new Robot();
            }
            public void play(){
                        r1.moveRobot(15);
                        r2.moveRobot(-10);
            }
            public static void main(String[] args){
                        BattleField game = new BattleField();
                        game.play();
            }
}