Extension function добавляет метод к типу без наследования: fun Type.foo() вызывается как instance.foo(), но это syntactic sugar над static-функцией.
Разбор
- Не ломает инкапсуляцию: нет доступа к private членам receiver.
- Резолв — статически по declared type, не runtime polymorphism.
- Популярны для UI (
View.show()), mapping, utils.
- Слишком много extensions засоряют API — группируйте по файлам.
Пример
fun String.initials(): String =
split(" ").mapNotNull { it.firstOrNull() }.joinToString("")
Итог
Extensions расширяют API типов без subclassing.