エンクロージングクラス
エンクロージングクラスという名前があるとは知りませんでした。
エンクロージングクラスを検索してみたところ、エンクロージングクラスを参照するための記述方法を知りました。
以下のコードはエンクロージングクラスの練習のためのコードです。
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^)/