abstract class A : JavaDefault, JavaPublic { constructor() /* primary */ { super/*Any*/() /* () */ } } class B : JavaDefault, JavaPublic { val a: Int field = 1 get constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo() { } } class C : JavaProtected, JavaPublic { val a: Int field = 1 get constructor() /* primary */ { super/*JavaProtected*/() /* () */ } override fun foo() { } } abstract class D : JavaPrivate, JavaPublic { constructor() /* primary */ { super/*JavaPrivate*/() /* () */ } } class E : JavaPrivate, JavaPublic { val a: Int field = 1 get constructor() /* primary */ { super/*JavaPrivate*/() /* () */ } override fun foo() { } } class F : JavaProtected, JavaDefault { val a: Int field = 1 get constructor() /* primary */ { super/*JavaProtected*/() /* () */ } override fun foo() { } } abstract class G : JavaPrivate, JavaDefault { constructor() /* primary */ { super/*JavaPrivate*/() /* () */ } } class H : JavaPrivate, JavaDefault { val a: Int field = 1 get constructor() /* primary */ { super/*JavaPrivate*/() /* () */ } override fun foo() { } } fun test(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H) { a.foo() b.() /*~> Unit */ b.foo() c.() /*~> Unit */ c.foo() d.foo() e.foo() f.() /*~> Unit */ f.foo() g.foo() h.foo() h.() /*~> Unit */ }