Esempio di uso di modificatori: public e private



Vediamo come si puo' controllare l'accesso alle variabili name ed ID di un oggetto della classe Student. Con l'uso del costruttore gia' visto, le variabili name e ID vengono inizializzate al momento della creazione. Ma poiche' le variabili d'istanza sono dichiarate public, e' ancora possibile una sequenza di comandi come
std1 = new Student("Mary Jones");
std1.name = ("Paolo Rossi");
std1.ID = std.ID
che sarebbe chiaramente da evitare... Per impedire questo, possiamo dichiarale private, come nel seguente codice:


public class Student {

   private String name;  // Student's name
   private int ID;       // unique ID number
   public double test1, test2, test3;
                        // grades on three tests

   private static int nextUniqueID = 1;
                // next available unique ID number
   Student(String theName) {
           // constructor for Student objects;
           // provides a name for the Student,
           // and assigns the student a unique
           // ID number
           name = theName;
           ID = nextUniqueID;
           nextUniqueID++;
       }
    public String getName() {
           // accessor method for reading value of private
           // instance variable, name
           return name;
       }
    public int getID() {
                    // accessor method for reading value of ID
         return ID;
       }
    public double getAverage() {  // compute average test grade
          return (test1 + test2 + test3) / 3;
       }

}  // end of class Student



Siccome le variabili d'istanza name e ID sono dichiarate private e il loro valore viene inizializzato dal costruttore, non esiste alcun modo di cambiarlo successivamente: nome e identificatore di un oggetto di classe Student rimangono lo stesso per tutta la vita dell'oggetto stesso.
Si noti che vengono forniti i metodi getName() e getID() per accedere ai valori delle variabili d'istanza. Questi metodi sono public, quindi dall'esterno della classe si possono leggere nome e ID di un oggetto  Student ma non si possono modificare.

arrow1_left.gif (1097 byte)arrow1_right.gif (1095 byte)