trait A { fun foo() {} } trait B : A, E {} trait C : B {} trait D : B {} trait E : F {} trait F : D, C {} trait G : F {} trait H : F {} val a : A? = null val b : B? = null val c : C? = null val d : D? = null val e : E? = null val f : F? = null val g : G? = null val h : H? = null fun test() { a?.foo() b?.foo() c?.foo() d?.foo() e?.foo() f?.foo() g?.foo() h?.foo() }