Quote Originariamente inviata da roquentin Visualizza il messaggio
Perchè è una pessima cosa dichiarare elemento public ?
Non è preferibile se voglio utilizzare elemento al di fuori della classe dove è stato creato ?
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":

codice:
public class Person {
    public int age;
    ... // altri campi, non ci interessano...
}
Potrei ora fare questo:

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:

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...
}
La situazione ora cambia:

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