私はSCJPを勉強していますが、勉強している間、最初はとても簡単だったようですが、解決できませんでした。コンストラクタをコールした後にmainからプライベートパッケージメソッドを呼び出す
を考える:(OCPのJava SE 6プログラマー実践試験、バート・ベイツとキャシーシエラから取られた)運動は、次のように述べてい
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.
私の推測はCでした。なぜなら、doStuffメソッドはMyPancakeクラスの中にあるから、メインメソッドはそれにアクセスできるはずです。
静的コンテキストからnewを呼び出すとき、doStuffがプライベートであった場合、プライベートメソッドにアクセスできないことがあります。これは本当ですか?私はこれについては分かりません。
しかし、とにかく、私はまだそれがpackage-private doStuffメソッドにアクセスできると思います。 私は間違っていると思うが、私は理由を知らない。
お手伝いできますか?
ありがとうございました!
ありがとうございます!私はメモを見直すことに集中していましたが、私はそれをコンパイルしようとはしませんでした。インターフェイスのメンバーは常に公開されていることを覚えておく必要があります。 – pablof