interface A { fun foo(): T } class B : A { override fun foo() = "OK" } class C(a: A) : A by a fun box(): String { val c = C(B()) val a: A = c return c.foo() + a.foo() } fun main(args: Array) { println(box()) }