「ネストしたクラス」の紹介と、外部からの使い方の解説を行います。
クラス内に、staticとして宣言されたクラスは「ネストしたクラス」として外部から利用できます。
クラス内に宣言されたインターフェースは「ネストしたインターフェース」として外部から利用できます。
クラス内に宣言されたインターフェースは、暗黙的にstaticになるので、staticを付けなくてもstatic修飾子が付いたものとして扱われます。
┏クラス━━━━━━━━━━━┓ ┃┏staticクラス━━━━━━┓┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━┛┃ ┃┏staticインターフェース━┓┃ ┃┃ ┃┃ ┃┗━━━━━━━━━━━━┛┃ ┗━━━━━━━━━━━━━━┛
package sample;
public class MyClass {
// 「ネストしたクラス」
public static class NstCls {
}
// 「ネストしたインターフェース」
// インターフェースは暗黙的にstaticになる
public interface NstIntr {
public void method();
}
}
ネストしたクラスやインターフェースは、外部からは「クラス名.ネストしたクラス名」とすることで利用できます。クラス名とネストしたクラス名は「.(ピリオド)」で区切ります。
// 「ネストしたクラス」を外部から作成 MyClass.NstCls nstCls= new MyClass.NstCls(); // 「ネストしたインターフェース」を外部から実装 MyClass.NstIntr nstIntr = new MyClass.NstIntr() { @Override public void method() { } };
「クラス名.ネストしたクラス名」という書き方が面倒な場合は、import文でネストしたクラスをインポートすることもできます。
import sample.MyClass.NstCls;
// 「ネストしたクラス」を外部から作成
NstCls nstCls= new NstCls();