public class top {
 public static void main(String[] args) throws Exception {
  new top().method();
 }
 public void method() throws Exception {
  //1
  top.inner obj = (top.inner)top.inner.class.newInstance();
  
  //2
  //top.inner obj = new top.inner();
  obj.method();
 }
 private static class inner {
  public void method() {
   System.out.println("inner method");
  }
 }
}
このコードをコンパイルすると正常に通るのですが、
実行させると、下記の例外が発生しました。
java.lang.IllegalAccessException: Class top can not access a member of class top$inner with modifiers "private"

でも、上のコードで//1をコメントにして、//2の方(通常のnewを使うほう)
を有効にして実行すると正常に実行されました。

引数なしコンストラクタを持ってたら、
new するのも newInstanceするのも同じと思ってたんですが、
実は全然違うものなのですが?