Я изучаю SCJP, и во время обучения я нашел упражнение, которое на первый взгляд казалось очень простым, но мне не удалось его решить, и я не понимаю ответа. В упражнении (взятом из практических экзаменов для программистов 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 был закрытым. Это правда? Я не уверен в этом.
Но в любом случае, я все еще думаю, что у него будет доступ к приватному методу пакета doStuff.
Наверное, я не прав, но не знаю почему.
Не могли бы вы мне помочь?
Спасибо!