Vantagem de definir e obter métodos versus variável pública [duplicado]

Duplicata Possível:
Por que usar getters e setters?

Existe alguma vantagem em criar métodos para acessar variáveis ​​privadas em sua classe em vez de tornar a variável pública?

Por exemplo, o segundo caso é melhor que o primeiro?

//Case 1
public class Shoe{
    public int size;
}

//Case 2
public class Shoe{
    private int size;
    public int getSize(){
        return size;
    }

    public void setSize(int sz){
        size = sz;
    }

}

questionAnswers(4)

yourAnswerToTheQuestion