interface I { fun a(): String fun b(): String } class C { fun a() = "C.a" fun b() = "C.b" } fun C.toI() = object : I { override fun a() = this@toI.a() override fun b() = this@toI.b() } fun f(i: I) { println(i.a()) println(i.b()) } fun main() { f(C().toI()) }