DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

6章6

A. staticなメソッドからは、staticなメソッドを呼び出せない

これは誤りです。staticメソッドは、同じクラス内の他のstaticメソッドを呼び出すことができます。実際にはこれは非常に一般的な実践です。

B. staticなメソッドからは、staticではないフィールドにアクセスできる

これも誤りです。staticメソッドはクラスレベルで定義されているため、インスタンス(オブジェクト)に属している非staticフィールドには直接アクセスできません。staticメソッドから非staticフィールドにアクセスするには、オブジェクトのインスタンスを明示的に参照する必要があります。

C. staticなメソッドからは、staticではないメソッドを呼び出せる

これは誤りです。staticでないメソッドは特定のインスタンスに属しているため、staticメソッドからはそれらを直接呼び出すことはできません。インスタンスメソッドを呼び出すには、そのクラスのオブジェクトを作成し、そのオブジェクトを通じてメソッドを呼び出す必要があります。

D. staticなメソッドからは、staticなフィールドにアクセスできる

これは正しいです。staticメソッドは、そのクラスのstaticフィールドに直接アクセスすることができます。

E. staticではないメソッドからは、staticなフィールドにアクセスできる

これも正しいです。非static(インスタンス)メソッドは、そのクラスのstaticフィールドにアクセスすることができます。

F. staticではないメソッドからは、staticなメソッドを呼び出せない

これは誤りです。非staticメソッドは、同じクラスのstaticメソッドを問題なく呼び出すことができます。staticメソッドはクラスに属するため、インスタンスに依存しないからです。

追記

もちろん、各選択肢に対するJavaコードの例を示します。

まず、基本となるクラスExampleClassを定義し、それぞれの選択肢に対する説明をコードで表現します。

public class ExampleClass {
    static int staticField = 10; // staticなフィールド
    int instanceField = 20;      // staticでないフィールド

    // staticなメソッド
    static void staticMethod() {
        System.out.println("Inside staticMethod");

        // A. staticなメソッドから、staticなメソッドを呼び出せる
        anotherStaticMethod();

        // B. staticなメソッドからは、staticでないフィールドにアクセスできない
        // System.out.println(instanceField); // コンパイルエラーになる

        // C. staticなメソッドからは、staticでないメソッドを呼び出せない
        // instanceMethod(); // コンパイルエラーになる

        // D. staticなメソッドからは、staticなフィールドにアクセスできる
        System.out.println(staticField); // 正しい
    }

    // 別のstaticなメソッド
    static void anotherStaticMethod() {
        System.out.println("Inside anotherStaticMethod");
    }

    // staticでないメソッド
    void instanceMethod() {
        System.out.println("Inside instanceMethod");

        // E. staticでないメソッドからは、staticなフィールドにアクセスできる
        System.out.println(staticField); // 正しい

        // F. staticでないメソッドからは、staticなメソッドを呼び出せない
        // この設問は間違い。
        // staticでないメソッドからは、staticなメソッドを呼び出せる
           
    }
}
Enter fullscreen mode Exit fullscreen mode

このクラスを使って動作を示すメインメソッドを作成します。

public class Main {
    public static void main(String[] args) {
        ExampleClass.staticMethod(); // staticメソッドの呼び出し

        ExampleClass example = new ExampleClass();
        example.instanceMethod(); // staticでないメソッドの呼び出し
    }
}
Enter fullscreen mode Exit fullscreen mode

このMainクラスを実行すると、ExampleClass内のstaticMethodinstanceMethodが呼び出され、各メソッド内でのフィールドや他のメソッドへのアクセスが可能かどうかが示されます。staticメソッドからstaticでないフィールドやメソッドにアクセスする部分(BとC)はコメントアウトしてあり、これらをアンコメントするとコンパイルエラーになることがわかります。これはstaticコンテキストから非staticコンテキストへの直接アクセスができないことを示しています。

Top comments (0)