There is no rule that constructor to be public .Generally we define it public just because we would like to instantiate it from other classes too .
Private constructor means,"i dont let anyone create my instance except me ".
So normally you would do this when you like to have a singleton pattern.
Following is the class in JDK which uses a private constructor .
public class Runtime {
private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
// Don't let anyone else instantiate this class
private Runtime() {
}
}