【Java入門】入れ子クラス(NestedClass)とInnerClassの書き方

【Java入門】入れ子クラス(NestedClass)とInnerClassの書き方

入れ子クラス(NestedClass)とは

あるブロック内で宣言されたクラスの総称を入れ子クラス(NestedClass)といいます。
入れ子クラス(NestedClass)には以下の3種類あります。

クラス 説明
staticメンバークラス クラス内で宣言されるstaticなクラス
メンバークラス クラス内で宣言されるインスタンスクラス
ローカルクラス メソッド内で宣言されるクラス

また、上記の内、下2つを内部クラス(InnerClass)といいます。
これらのクラスはクラス名を持たずに利用することができ、このようなクラスを匿名クラスといいます。


public class ClassA{

   //staticメンバークラス
    private static class staticClass {}

   //メンバークラス(内部クラス)
    private class instanceClass {}

    //ローカルクラス(内部クラス)
    void methodA(){
        class localClass{}
    }
}

メンバークラスとして宣言された入れ子クラスは、通常のフィールドやメソッドのようにアクセス修飾子を付けることができます。
(ローカルクラスにアクセス修飾子を付けるとコンパイルエラーになる。)

内部クラス(メンバークラスの)メソッドを呼び出す

インスタンスメソッドから内部クラスのメソッドを呼び出す

インスタンスメソッドから内部クラスのメソッドを呼び出すには、通常のクラスを利用するのと同じように、まず内部クラスのインスタンスを生成し、メソッドにアクセスします。
以下のコード例では、5行目で内部クラスのインスタンスを生成し、6行目でメソッドを実行しています。

このコードは、究極的には以下のように簡略化することができます。

staticメソッドから内部クラスのメソッドを呼び出す

staticメソッドから内部クラスのメソッドを呼び出すには、まず外側のクラスのインスタンスを取得してからその参照を用いて内部クラスのインスタンスを取得して、メソッドにアクセスします。
以下のコード例では、6行目で外側のクラスであるClassAのインスタンスを用いて内部クラスであるInnerのインスタンスを取得して、7行目でメソッドを実行しています。

このコードは、究極的には以下のように簡略化することができます。

他クラスから、あるクラスの内部クラスを呼び出す方法

例えばClassB.javaからClassA.javaの内部クラスを利用するには以下のように記述します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です