interface A { fun foo(t: T) = "A" } interface B { fun foo(t: T) = "B" } class Z : A, B { override fun foo(t: Int) = "Z" } fun box(): String { val z = Z() val a: A = z val b: B = z return when { z.foo(0) != "Z" -> "Fail #1" a.foo(0) != "Z" -> "Fail #2" b.foo(0) != "Z" -> "Fail #3" else -> "OK" } }