Поскольку вы связали документацию, я полагаю, что вы прочитали следующую часть
Экземпляр класса, в котором объявлено расширение, называется диспетчер отправки , и экземпляр типа приемника метода расширения называется приемник расширения .
После того, как вы поняли вышеизложенное В терминологии необходимо понимать следующие пункты
- Если вы не знаете о виртуальных методах, прочитайте this
Расширения разрешаются статически . Рассмотрим следующий кодовый блок
fun call(b: Base) {
// This will always call extension function defined on the Base class
// even if you pass an object of Derived class
b.printFunctionInfo() // call the extension function
}
// This calls the printFunctionInfo defined on the Base, even though we pass Derived
DerivedCaller().call(Derived())
Теперь к вашему вопросу
отправка таких функций является виртуальной в зависимости от типа получателя отправления, но остается c относительно типа приемника добавочного номера.
С помощью Расширения разрешаются статически Мы установили, что независимо от того, какой объект вы передаете ( Base или Derived) функция call
всегда будет вызывать функцию расширения, определенную для типа Base.
Но какая функция расширения будет вызываться ? один в базовом классе или один в производном классе?
Это зависит от типа объекта, который вызывает функцию call
, если вы вызываете вызов с помощью Object of Base, тогда расширение в базовом классе будет вызван, и если вы используете объект Derived, то будет вызвано расширение в классе Derived.