or1ko's diary

日々を書きます

エンクロージングクラス

エンクロージングクラスという名前があるとは知りませんでした。
エンクロージングクラスを検索してみたところ、エンクロージングクラスを参照するための記述方法を知りました。

以下のコードはエンクロージングクラスの練習のためのコードです。

class Test {

  public static void main(String[] args) {
    System.out.println(new EnclosingClass("E").new InnerClass("I"));
  }

  static class EnclosingClass {
    String name;
    public EnclosingClass(String name) {
      this.name = name;
    }
    class InnerClass {
      String name;
      public InnerClass(String name) {
        this.name = name;
      }
   @Override
      public String toString() {
        return this.name + " " + EnclosingClass.this.name + " " + name;
      }
    }
  }
}

実行

> javac Test.java
> java Test
I E I

インスタンスから.newを呼び出す方法を知らなかったころは、上記のコードと同じようなことを実現するために以下のコードを書いていました。

class Test2 {

  public static void main(String[] args) {
    System.out.println(new InnerClass(new EnclosingClass("E"),"I"));
  }

  static class EnclosingClass {
    String name;
    public EnclosingClass(String name) {
      this.name = name;
    }
  }
  static class InnerClass {
    EnclosingClass enclosingClass;
    String name;
    public InnerClass(EnclosingClass enclosingClass, String name) {
      this.enclosingClass = enclosingClass;
      this.name = name;
    }
  @Override
    public String toString() {
      return this.name + " " + enclosingClass.name + " " + name;
    }
  }
}

この2つのコードの違いは、私にはちょっと考えただけでは分かりませんでした。
アクセス修飾子について考えたら分かるかな...う〜ん。難しい。
書き方が違うことだけは分かったぞ\(^o^)/