Выбор ответа Middle Функции, расширения и scope-функции обновлено
Член класса или расширение: что вызовется
Вопрос
У класса есть метод fun greet() = "member", и объявлено расширение fun Person.greet() = "extension". Что вернёт person.greet()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: "member", член класса всегда побеждает. Если у класса есть член с подходящей сигнатурой, он всегда выигрывает у расширения, а компилятор предупредит, что расширение затенено (extension is shadowed by a member).
Варианты ответа
"extension", расширение объявлено позже- Ошибка компиляции: неоднозначный вызов
- Зависит от того, импортировано ли расширение
"member", член класса всегда побеждаетправильный ответ
Разбор
Если у класса есть член с подходящей сигнатурой, он всегда выигрывает у расширения, а компилятор предупредит, что расширение затенено (extension is shadowed by a member). Поэтому расширением нельзя «переопределить» поведение чужого класса. Расширение сработает только для другой сигнатуры, например с другими параметрами.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.