public
すべてのクラスに公開
外から書き換えられる

private
非公開
外から書き換えられなし、見ることもできない



例えば下記の場合、counterで生成したインスタンスの数を数える。
counterは見えないが、getCounterでGETすることはできる。

Rectangle.java
public
class Rectangle {

  int width;

  int height;

  private static int counter = 0;

  int number;

  public Rectangle(){

    setSize(10,20);

    number = counter;

    counter++;

  }

  public Rectangle(int width,int height){

    setSize(width,height);

    number = counter;

    counter++;

  }

  public void setSize(int width, int height){

    this.width = width;

    this.height  = height;

  }

  public void printSize(){

    System.out.println("Rectangle(" + width + "," + height +")");

  }

  public static int getCounter(){

  return counter;

  }

}



なぜか・・・
まず、外から操作をさせない。できるべきものでもない、から。
それによってバグが起きてしまうかもしれないから。

もう1つの理由。
別に、publicでも動く。
でも、複数人で1つのものをつくっていたりすると、
例えば、
普通、書き換えることはないものでも、
publicになっていたら、そのcounterが外から書き換えることのあるものだと勘違いするかもしれない。
ある意味親切にするために、わかりやすくするために、privateはprivate、publicはpublicでかく。