class A : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } } class B : Java1 { constructor() /* primary */ { super/*Java1*/() /* () */ } override fun bar(): String { return CHECK_NOT_NULL(arg0 = null) } override fun foo(s: String?) { } } abstract class C : Java2 { constructor() /* primary */ { super/*Any*/() /* () */ } } class D : Java2 { constructor() /* primary */ { super/*Any*/() /* () */ } override fun bar(): String { return "" } override fun foo(s: String) { } } fun test(a: A, b: B, c: C, d: D) { val k: String? = a.#nullableString val k2: String? = a.bar() a.foo(s = null) a.foo(s = "") val k3: String? = b.#nullableString val k4: String = b.bar() b.foo(s = null) b.foo(s = "") val k5: String = c.bar() /*!! String */ c.foo(s = "") val k6: String = d.bar() d.foo(s = "") }