No. L'accessi ai campi va sempre fatto attraverso gli opportuni metodi (getter e setter). Questo perché in questo modo è possibile controllare l'accesso ai campi ed evitare stati inconsistenti.
Ti faccio un esempio.
Abbiamo una classe "Person" che modella una persona. Avrà nome, cognome, età ecc.
L'età ha un vincolo: deve essere non negativa (ovviamente!)
Approccio "public":
Potrei ora fare questo:codice:public class Person { public int age; ... // altri campi, non ci interessano... }
Person p = new Person();
p.age = -100; // non ha senso ma non c'è nulla che me lo impedisce!
Un ipotetico metodo calcolaPensione(p) mi darebbe risultati sbagliati! BOOM!
Approccio serio:
La situazione ora cambia:codice:public class Person { private int age; public void setAge(int age) { if (age < 0) { throw new IllegalArgumentException("age must be >= 0!"); } this.age = age; } public int getAge() { return age; } ... // altra roba... }
Person p = new Person();
p.age = -100; // ERRORE DI COMPILAZIONE! age è privato, non posso accederci!
p.setAge(-100); // ERRORE A RUNTIME: mi stampa sulla console "age must be >= 0!"
p.setAge(40); // OK!
int age = p.getAge();
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Si capisco benissimo quello che dici, però nel caso una variabile sia "interna" nel senso che la uso per metterci solo determinati valori definiti da me in un menù a tendina, potrebbe anche andare, no?