trait BK { fun x() : Int = 50 } trait K : BK { override fun x() : Int = super.x() * 2 } open class M() { open fun x() : Int = 10 } open class N() : M(), K { override fun x() : Int = 20 open class C() : K { fun test1() = x() fun test2() = super@N.x() fun test3() = super@N.x() fun test4() = super.x() } } fun box(): String { if (N().C().test1() != 100) return "test1 fail"; if (N().C().test2() != 10) return "test2 fail"; if (N().C().test3() != 100) return "test3 fail"; if (N().C().test4() != 100) return "test4 fail"; return "OK"; }