interface A { val value: T } interface B : A open class C(override val value: String) : B interface X { val value: CharSequence } class Y(value: String) : C(value), X fun box(): String = (Y("OK") as X).value.toString()