mercoledì 28 aprile 2010

Java: sovraccarico (overhead) e cotruttore predefinito

Java prevede il sovraccarico dei metodi e dei costruttori. Più metodi possono avere lo stesso nome ma tipi parametri di parametri diversi (stesso nome ma firma diversa). E' il compilatore che si fa carico di trovare la giusta corrispondenza fra i tipi di parametri dei metodi che hanno lo stesso nome. Se tale corrispondenza non viene trovata viene allora generato un errore.
Se una classe è priva di costruttori viene aggiunto di default un costruttore predefinito che assegna lo stato iniziale per le variabili dell'oggetto in questo modo: i campi numerici dell'istanza sono impostati a zero, i riferimenti a null e i valori booleani a false.
Qualcuno potrebbe fare affidamento su questa cosa per risparmiarne poi la scrittura. La cosa funziona, ma al primo errore spesse volte si dimentica di aver usato un assegnazione invisibile per le variabili del nuovo oggetto (il costruttore predefinito aggiunto di dafualt). Ecco allora l'utilità dell'aggiunta a mano di un costruttore predefinito, eviteremo così spiacevoli riferimenti a null e valori inattesi oltre a scrivere codice assai più completo (e leggibile).
Se dotiamo la classe di un costruttore proprio (almeno uno), Java non interferirà con le nostre idee e nessun costruttore predefinito verrà aggiunto (in tal caso, se tale costruttore è utile all'applicazione, dovrà essere scritto da noi!).

class Car {
   // costruttore predefinito
   public Car() {
      this.model="new_project";
      this.cc=0;
   }
   // altri costruttori
   public Car(int cc) {
      this.model="prototype";
      this.cc=cc;
   }
   public Car(String model, int cc) {
      this.model=model;
      this.cc=cc;
   }
   ...
}

Nessun commento:

Posta un commento