Все мы хотим (и даже должны) делать хорошую архитектуру приложений: разбивать на слои, писать переиспользуемый код, покрывать тестами, не использовать сильные связи между классами (например наследование 😦) и др.
Для этого у нас есть много рекомендаций, одна из которых - делегаты. В Java я не использовал этот шаблон программирования активно по причине, что это боль - нужно писать дубликат API из делегата и пробрасывать все вызовы в этот объект.
Kotlin сделал этот подход проще, так как на уровне языка есть поддержка делегатов, что позволяет переиспользовать код без наследования в одну строку кода. Также можно построить своеобразный вариант множественного наследования.