Выбор ответа Junior Функции, расширения и scope-функции обновлено

Доступ расширений к private

Вопрос

Есть ли у функции расширения доступ к private полям класса, который она расширяет?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет, это внешняя функция, ей видны только доступные снаружи члены. Расширение не меняет класс, оно компилируется в статическую функцию с объектом в первом параметре.

Варианты ответа

  1. Да, расширение становится частью класса при компиляции
  2. Нет, это внешняя функция, ей видны только доступные снаружи членыправильный ответ
  3. Да, если расширение объявлено в том же пакете, что и класс
  4. Только если класс помечен open и не final

Разбор

Расширение не меняет класс, оно компилируется в статическую функцию с объектом в первом параметре. Поэтому видит то же, что видел бы любой внешний код: public и internal (в том же модуле). Исключение: расширение, объявленное внутри самого класса, видит его приватные члены, как любой другой член.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.