class A{
 private int hoge;
 public A(int foo){ hoge = foo; }
}
class B{
 private int hoge;
 private B(int foo){hoge = foo;}
 public static B createB(int foo){ return new B(foo); }
}
public class StaticClassTest01 {
 A a = new A(1);
 B b = B.createB(1);
}
Aの様な型と、Bの様な型と、どのように使い分ければよいのでしょうか?