////////////////////////////////////////////////////////////////////////////////
//  << j271a.java >>
//
//  クラス(7):内部クラス(内部クラスの作成、内部クラスのスコープ)
//
//  内部クラスのスコープを確認する。
//
//  ・内部クラスは、内部クラスを含むクラスのスコープ内にあるので、
//   内部クラスを含むクラスのメンバに内部クラスからアクセスできる。
//
//  (1)内部クラスの定義。
//  (2)内部クラスINCを指す変数objiを宣言。
//  (3)内部クラスINCのオブジェクトobjiの作成
//  (4)クラスCのオブジェクトobjの作成
//  (5)クラスCのメソッドm1の呼び出し。
//  (6)内部クラスINCのフィールドsincをクラスCのメソッドm1から参照する。
//  (7)内部クラスINCのメソッドmincをクラスCのメソッドm1から呼び出す。
//  (8)クラスCのフィールドsを内部クラスから参照する。
//  (9)クラスCのメソッドm2を内部クラスから呼び出す。
//
////////////////////////////////////////////////////////////////////////////////

class C {
  String s = "クラスC内のフィールド変数";

  INC obji; //(2)

  C() { // クラスCのコンストラクタ。
    obji = new INC(); //(3)
  }

  void m1() {
    System.out.println("(6)obji.sinc = " + obji.sinc); //(6)
    System.out.println("(7)obji.minc():"); obji.minc(); //(7)
  }

  void m2() {
    System.out.println("クラスC内のメソッド"); 
  }

  //(1)
  class INC {
    String sinc = "内部クラス内のフィールド変数";
    void minc() {
      System.out.println("(8)s = " + s); //(8)
      System.out.print("(9)m2():"); m2(); //(9)
    }
  }

}

class j271a {
  public static void main(String args[]) {

    C obj = new C(); //(4)

    System.out.println("(5)obj.m1():");obj.m1(); //(5)

  }

}
実行結果
% javac j271a.java
% java j271a
(5)obj.m1():
(6)obji.sinc = 内部クラス内のフィールド変数
(7)obji.minc():
(8)s = クラスC内のフィールド変数
(9)m2():クラスC内のメソッド