// MODULE: lib // FILE: lib.kt interface I { fun foo(): String } abstract class A { abstract fun bar(): String } abstract class G { abstract fun baz(): T } class C { private val propA = object : A() { override fun bar() = "propA.bar" fun x() = "OK" } private val propI = object : I { override fun foo() = "propI.foo" fun x() = "OK" } private val propAI = object : A(), I { override fun foo() = "propAI.foo" override fun bar() = "propAI.bar" fun x() = "OK" } private val propG = object : G() { override fun baz() = "propG.baz" fun x() = "OK" } } // MODULE: main(lib) // FILE: main.kt fun test() { println(C().propA.x()) println(C().propI.x()) println(C().propAI.x()) println(C().propG.x()) }