LoginSignup
0
0

More than 1 year has passed since last update.

エンクロージングインスタンスについて2

Last updated at Posted at 2018-09-05

実際にエンクロージングインスタンスについて実践してみました

とりあえずこんな感じかな?と思い書いてみました。


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);
        }
    }
}

呼べました。
いろんな呼び出し方があるんだなということで勉強になりました

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0