publicだと、例えば座標に100以下の制限を入れたいとき毎回条件文書く必要がある。

chara.x = 300; //とか = a;とか
if(chara.x > 100) chara.x = 100;

万が一if文を抜いてる所が合ったらそこで制限を越えてxに値が入るかも。
でもprivateにしてsetX(int)でしか更新できないようにすると、

chara.setX(300); //100にするとかsetXで勝手にやる

というように、呼出側はxをいじる度にif文の書き忘れに震える必要がない。
つまり、変数いじるのに一様な制限したいならprivateにした方がよくなくなくない?