Artigo original: Getters and Setters in Java Explained

Getters e setters são usados para proteger seus dados, especialmente na criação de classes.

Para cada instância de variável, um método getter retorna seu valor, enquanto um método setter o define ou atualiza. Com isso em mente, getters e setters também são conhecidos como métodos de acesso e de modificação, respectivamente.

Por convenção, getters começam com a palavra "get" e setters com a palavra "set", seguidos de um nome de variável. Em ambos os casos, a primeira letra do nome da variável será maiúscula:

public class Vehicle {
  private String color;
  
  // Getter
  public String getColor() {
    return color;
  }
  
  // Setter
  public void setColor(String c) {
    this.color = c;
  }
}

O método getter retorna o valor do atributo. O método setter recebe um parâmetro e o coloca no atributo.

Quando os métodos getter e setter estiverem definidos, os utilizamos no main:

public static void main(String[] args) {
  Vehicle v1 = new Vehicle();
  v1.setColor("Vermelho");
  System.out.println(v1.getColor());
}

// O resultado é "Vermelho"

Getters e setters permitem o controle dos valores. Você pode validar o valor dado no setter antes de definir o valor de fato.

Por que usar getters e setters?

Getters e setters permitem controlar a forma como variáveis importantes são acessadas e atualizadas no seu código. Por exemplo, considere este método setter:

public void setNumber(int number) {
  if (number < 1 || number > 10) {
    throw new IllegalArgumentException();
  }
  this.number = num;
}

Ao usar o método setNumber, você pode se certificar de que o valor de number está sempre entre 1 e 10. Isso é muito melhor do que atualizar a variável number diretamente:

obj.number = 13;

Se você atualizar number diretamente, você pode vir a causar efeitos colaterais indesejados em outros pontos do seu código. Aqui, definir number com o valor de 13 violaria a restrição que desejamos estabelecer de que o número precisa estar entre 1 e 10.

Tornar number uma variável privada e usar o método setNumber evita que isso aconteça.

Por outro lado, a única maneira de ler o valor de number é usando um método getter:

public int getNumber() {
  return this.number;
}