私は SCJP を勉強しています。勉強中に、最初は非常に簡単に思える問題を見つけましたが、解決できず、答えがわかりません。演習 ( OCP Java SE 6 Programmer Practice Exams、Bert Bates および Kathy Sierra から取得) には、次のように記載されています。
与えられた:
import java.util.*;
public class MyPancake implements Pancake {
public static void main(String[] args) {
List<String> x = new ArrayList<String>();
x.add("3");x.add("7");x.add("5");
List<String> y = new MyPancake().doStuff(x);
y.add("1");
System.out.println(x);
}
List<String> doStuff(List<String> z) {
z.add("9");
return z;
}
}
interface Pancake {
List<String> doStuff(List<String> s);
}
What is the most likely result?
A. [3, 7, 5]
B. [3, 7, 5, 9]
C. [3, 7, 5, 9, 1]
D. Compilation fails.
E. An exception is thrown at runtime
答えは次のとおりです。
D is correct. MyPancake.doStuff() must be marked public. If it is, then C would be
correct.
A, B, C, and E are incorrect based on the above.
doStuff メソッドはクラス MyPancake 内にあるため、main メソッドはそれにアクセスする必要があるため、私の推測では C でした。
質問を再考すると、静的コンテキストから new を呼び出すときに、doStuff が非公開の場合、非公開メソッドにアクセスできない可能性があります。これは本当ですか?これはよくわかりません。
とにかく、パッケージプライベートの doStuff メソッドにアクセスできると思います。私は間違っていると思いますが、理由はわかりません。
私たちを手伝ってくれますか?
ありがとうございました!