Это называется делегирование , в частности, это тип делегирования, известный как реализация делегированием.
При этом класс C
реализует интерфейс с использованием другого объекта.
то есть, когда вы вызываете метод (функцию), определенный в интерфейсе, тогда вызов будет передан объекту, который вы делегировали в вашем случае, это field
interface T {
fun print()
}
class TImpl: T {
override fun print() = print("Hello World!")
}
class C(val field: T) : T by field {...}
fun main() {
val c = C(TImpl())
c.print() //Prints: Hello World!
}
Здесь вызов print()
переводится в TImpl
, потому что класс C реализует T с помощью поля.