Что будет выведено в консоль (пример 2)

Будет напечатано C: test() является требованием протокола, и Cat предоставляет собственную реализацию.

Короткий ответ

Что ответить на собеседовании

Будет напечатано C: test() является требованием протокола, и Cat предоставляет собственную реализацию.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой текст появится в выводе программы и объясните, почему именно он выводится.

protocol Test {
    func test()
}
extension Test {
    func test() { print("A") }
}

struct Cat: Test {
    func test() { print("C") }
}

var obj: Test = Cat()
obj.test()

Ответ

Будет напечатано C: test() является требованием протокола, и Cat предоставляет собственную реализацию.

Экземпляр Cat упакован в переменную протокольного типа Test, но динамический вызов требования использует реализацию соответствия Cat. Метод из extension Test — реализация по умолчанию для типов без собственной версии. Чтобы получить A в таком примере, пришлось бы убрать реализацию Cat либо изменить сам контракт протокола; в исходной программе оснований выбирать default нет.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее