abstract class A : Java2, Java1 { constructor() /* primary */ { super/*Java2*/() /* () */ } } class B : Java2, Java3 { constructor() /* primary */ { super/*Java2*/() /* () */ } } class C : Java2, Java3 { constructor() /* primary */ { super/*Java2*/() /* () */ } override fun foo2() { } override fun foo3() { } } abstract class D : Java1, Java3 { constructor() /* primary */ { super/*Any*/() /* () */ } } class E : Java1, Java3 { constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo() { } override fun foo2() { } override fun foo3() { } } class F : Java2, KotlinInterface { constructor() /* primary */ { super/*Java2*/() /* () */ } } class G : Java2, KotlinInterface { constructor() /* primary */ { super/*Java2*/() /* () */ } override fun foo2() { } override fun foo3() { } } abstract class H : Java1, KotlinInterface { constructor() /* primary */ { super/*Any*/() /* () */ } } class I : Java1, KotlinInterface { constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo() { } override fun foo2() { } override fun foo3() { } } interface KotlinInterface { abstract fun foo() abstract fun foo2() abstract fun foo3() } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I) { a.foo() a.foo2() a.foo3() b.foo() b.foo2() b.foo3() c.foo() c.foo2() c.foo3() d.foo() d.foo2() d.foo3() e.foo() e.foo2() e.foo3() f.foo() f.foo2() f.foo3() g.foo() g.foo2() g.foo3() h.foo() h.foo2() h.foo3() i.foo() i.foo2() i.foo3() }