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();