interface ISomething open class ClassWithToString { override fun toString(): String = "C" } interface IWithToString { override fun toString(): String } class C1 : ClassWithToString(), ISomething { override fun toString(): String = super.toString() } class C2 : ClassWithToString(), IWithToString, ISomething { override fun toString(): String = super.toString() } fun box(): String { return when { C1().toString() != "C" -> "Failed #1" C2().toString() != "C" -> "Failed #2" else -> "OK" } }