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なメソッドを呼び出せる
}
}
このクラスを使って動作を示すメインメソッドを作成します。
public class Main {
public static void main(String[] args) {
ExampleClass.staticMethod(); // staticメソッドの呼び出し
ExampleClass example = new ExampleClass();
example.instanceMethod(); // staticでないメソッドの呼び出し
}
}
このMain
クラスを実行すると、ExampleClass
内のstaticMethod
とinstanceMethod
が呼び出され、各メソッド内でのフィールドや他のメソッドへのアクセスが可能かどうかが示されます。static
メソッドからstatic
でないフィールドやメソッドにアクセスする部分(BとC)はコメントアウトしてあり、これらをアンコメントするとコンパイルエラーになることがわかります。これはstatic
コンテキストから非static
コンテキストへの直接アクセスができないことを示しています。
Top comments (0)