実際にエンクロージングインスタンスについて実践してみました
とりあえずこんな感じかな?と思い書いてみました。
public class Outer {
String outerName = "outer";
public static void main(String[]args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
System.out.println(Outer.outerName);////
}
public class Inner{
}
}
///の部分がエラーでした。staticなmainメソッドからはstaticでないOuterクラスのフィールドは呼べないとのことでしたので、改良
public class Outer {
String outerName = "outer";
public static void main(String[]args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.outerAccess();
}
public class Inner{
void outerAccess() {
System.out.println(outerName);
}
}
}
staticじゃない内部クラスであるInnerクラスでStaticじゃない外部クラス(Outer)のメンバーであるouter.nameを呼びます。
そして、mainメソッドでOuterクラスのインスタンスに含まれたInnerクラスのインスタンスを作成して、InnerクラスのouterAccessメソッドをよびだすことによってエラーが出なくなりました(InnerインスタンスのouterAccessメソッドか?)。
そもそもouter.outerNameで呼べるんじゃ?と思い実行してみたところ
public class Outer {
String outerName = "outer";
public static void main(String[]args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.outerAccess();
System.out.println(outer.outerName);
}
public class Inner{
void outerAccess() {
System.out.println(outerName);
}
}
}
呼べました。
いろんな呼び出し方があるんだなということで勉強になりました