package example interface T { fun foo() {} } open class C() { fun bar() {} } class A() : C(), T { fun test() { super super super.foo() super.foo() super.bar() super@A.foo() super@A.bar() super<E>.bar() super<E>@A.bar() super<Int>.foo() super<>.foo() super<() -> Unit>.foo() super<Unit>.foo() super@B.foo() super@B.bar() } inner class B : T { fun test() { super.foo(); super<C>.bar() super@A.bar() super@A.foo() super@B.foo() super<C>@B.foo() super.foo() super super } } } interface G { fun foo() {} } class CG : G { fun test() { super.foo() // OK super>.foo() // Warning super<G<E>>.foo() // Error super<G>.foo() // Error } } // The case when no supertype is resolved class ERROR() : UR { fun test() { super.foo() } }