interface T { open val baz: String get() = "T.baz" } open class A { open val bar: String get() = "OK" open val boo: String get() = "OK" } open class B : A(), T { override val bar: String get() = "B" override val baz: String get() = "B.baz" inner class E { val bar: String get() = super@B.bar + super@B.bar + super@B.baz } } class C : B() { override val bar: String get() = "C" override val boo: String get() = "C" inner class D { val bar: String get() = super@C.bar + super@C.boo } } fun box(): String { var r = "" r = B().E().bar if (r != "OKOKT.baz") return "fail 1; r = $r" r = C().D().bar if (r != "BOK") return "fail 2; r = $r" return "OK" }