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