Javaのstaticインナークラスの特徴と実装例

Javaのstaticな内部クラス

Javaのstaticな内部クラスにはいくつかの特徴があります。
まず、staticな内部クラスは外部クラスのインスタンスに依存せず、独立している点が挙げられます。
これにより、外部クラスのインスタンスがなくてもstaticな内部クラスを生成できます。

また、staticな内部クラスは外部クラスの非staticメンバには直接アクセスできませんが、staticメンバにはアクセスできます。
これは、staticな内部クラスが外部クラスのstaticなコンテキスト内で定義されているためです。

さらに、staticな内部クラスは通常、外部クラスと同じ名前空間に存在しますが、外部クラスのprivateメンバにもアクセスできるという点で、他のクラスとは異なります。

staticインナークラスの実装例

以下は、Javaでのstaticな内部クラスの実装例です。

public class OuterClass {
    
    private static int outerStaticField = 10;
    private int outerInstanceField = 20;

    // Static inner class
    public static class StaticInnerClass {
        
        private int innerInstanceField;

        public StaticInnerClass(int innerInstanceField) {
            this.innerInstanceField = innerInstanceField;
        }

        public void display() {
            // インナークラスから外部クラスのstaticメンバにアクセス
            System.out.println("Outer static field: " + outerStaticField);
            
            // インナークラスから外部クラスのインスタンスメンバには直接アクセスできない
            // System.out.println("Outer instance field: " + outerInstanceField);
            
            // インナークラスのインスタンスメンバにアクセス
            System.out.println("Inner instance field: " + innerInstanceField);
        }
    }

    public static void main(String[] args) {
        // Static inner classのインスタンスを生成
        StaticInnerClass innerInstance = new StaticInnerClass(30);

        // インナークラスのメソッドを呼び出し
        innerInstance.display();
    }
}

この例では、OuterClassという外部クラスがあり、その中にStaticInnerClassというstaticな内部クラスが定義されています。
外部クラスのstaticメンバには直接アクセスできますが、外部クラスのインスタンスメンバには直接アクセスできません。