var result = "" trait Base open class Child : Base trait A { fun foo(a : E) { result += "A" } } class B : A { override fun foo(a : E) { result += "B" } } fun box(): String { val b = B() b.foo(Child()) (b : A).foo(Child()) return if (result == "BB") "OK" else "Fail: $result" }