新城@筑波大学情報です。こんにちは。

Java の inner class で private になっているフィールドに外か
らアクセスできてしまいます。これは、どういう理屈なのでしょう
か。たとえば、こんなプログラムが動きます。

------------------------------------------------------------
class MyTest {
  class M2 {
    private int x;
    private int y;

    M2(){
      x=2;
      y=5;
    }
  }

  M2 m;

  void setM2x(int x){
    m.x = x;
  }

  MyTest(){
    m = new M2();
  }

  public String toString(){
    return "x = " + m.x + ", " + "y = " + m.y;
  }

}

class Main {
  public static void main(String args[]){
    MyTest m = new MyTest();

    m.setM2x( 100);
    System.out.println(m);
  }
}
------------------------------------------------------------

試したコンパイラは、javac 1.5.0_07 です。

普通のブロック構造を考えても、内側にアクセスしているみたいで、
納得いきません。何か説明があればお願いします。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\