🎯

【Java】クラス解説40・スタティックネステッドクラス

2024/07/23に公開

スタティックネステッドクラス

スタティックネステッドクラスとは、staticが付与されたネストクラスです。
特徴は、staticが付与されているので、外部クラスのインスタンスに依存しません。また、外部クラスのstaticなフィールド及びメソッドのみアクセスすることが可能です。

スタティックネステッドクラスのインスタンス化するコード例

public class Main {
    public static void main(String... args) {
        // 外側のクラスのインスタンス化
        Fuzi fz = new Fuzi();
        // 外側のクラスのcreateメソッドを呼び出し
        fz.create();
    }
}

// 外側のクラス
class Fuzi {
    // 内側のスタティックネステッドクラスSakuraを定義
    static class Sakura {
        static void print() {
            System.out.println("サクラ");
        }
    }

    void create() {
        // 内側のスタティックネステッドクラスSakuraのインスタンス化
        Sakura sk = new Sakura();
        // 内側のスタティックネステッドクラスSakuraに定義されているprintメソッドを呼び出し
        sk.print();
    }
}

外側のクラスより外からスタティックネステッドクラスのインスタンス化するコード例

public class Main {
    public static void main(String... args) {
        // 外側のクラスより外からスタティックネステッドクラスのインスタンス化
        Fuzi.Sakura sk = new Fuzi.Sakura();
        // 内側のスタティックネステッドクラスSakuraに定義されているprintメソッドを呼び出し
        sk.print();
    }
}

// 外側のクラス
class Fuzi {
    // 内側のスタティックネステッドクラスSakuraを定義
    static class Sakura {
        static void print() {
            System.out.println("サクラ");
        }
    }
}

外側のクラスのstaticなフィールドにスタティックネステッドクラスからアクセスするコード例

public class Main {
    public static void main(String... args) {
        // 外側のクラスより外からスタティックネステッドクラスのインスタンス化
        Fuzi.Sakura sk = new Fuzi.Sakura();
        sk.print();
    }
}

// 外側のクラス
class Fuzi {
    
    // 外側のクラスのstaticな変数を定義
    private static String name = "サクラ";
    
    // 内側のスタティックネステッドクラスSakuraを定義
    static class Sakura {
        static void print() {
            // 外側のクラスのstaticなフィールドにスタティックネステッドクラスからアクセス
            System.out.println(name);
        }
    }
}

外側のクラスのstaticなメソッドにスタティックネステッドクラスからアクセスするコード例

public class Main {
    public static void main(String... args) {
        // 外側のクラスより外からスタティックネステッドクラスのインスタンス化
        Fuzi.Sakura sk = new Fuzi.Sakura();
        sk.callprint();
    }
}

// 外側のクラス
class Fuzi {
    
    // 外側のクラスのstaticな変数を定義
    private static String name = "サクラ";
    
    // 内側のスタティックネステッドクラスSakuraを定義
    static class Sakura {
        static void callprint() {
            // 外側のクラスのstaticなメソッドにスタティックネステッドクラスからアクセス
            print();
        }
    }
    
    // 外側のクラスのstaticなメソッドを定義
    private static void print() {
        System.out.println(name);
    }
}

4つのコード共に、出力結果はサクラとなります。

Discussion