Ventaja de establecer y obtener métodos vs variable pública [duplicado]

Posible duplicado:
¿Por qué usar getters y setters?

¿Hay alguna ventaja en hacer métodos para acceder a variables privadas en su clase en lugar de hacer pública la variable?

Por ejemplo, ¿el segundo caso es mejor que el primero?

//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;
    }

}

Respuestas a la pregunta(4)

Su respuesta a la pregunta