6章6

RMAG news

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コンテキストへの直接アクセスができないことを示しています。

Leave a Reply

Your email address will not be published. Required fields are marked *