interface One { public open fun foo() : Int public open fun faz() : Int = 10 } interface Two { public open fun foo() : Int public open fun quux() : Int = 100 } class OneImpl : One { public override fun foo() = 1 } class TwoImpl : Two { public override fun foo() = 2 } class Test2(a : One, b : Two) : Two by b, One by a { public override fun foo() = 0 } fun box() : String { var t2 = Test2(OneImpl(), TwoImpl()) if (t2.foo() != 0) return "Fail #1" if (t2.faz() != 10) return "Fail #2" if (t2.quux() != 100) return "Fail #3" if (t2 !is One) return "Fail #4" if (t2 !is Two) return "Fail #5" return "OK" }