open class A { constructor() /* primary */ { super/*Any*/() /* () */ } open fun foo(a: Int = 0, b: Any? = "string", c: Nothing? = null) { } } abstract class B : A, Java1 { constructor() /* primary */ { super/*A*/() /* () */ } } class C : A, Java1 { constructor() /* primary */ { super/*A*/() /* () */ } override fun foo(a: Int?, b: Any?, c: Any?) { } } class D : A, Java2 { constructor() /* primary */ { super/*A*/() /* () */ } override fun foo(a: Int, b: Any?, c: Nothing?) { } } interface KotlinInterface { fun foo(a: Int = 1, b: Any? = "string2", c: Nothing? = null) { } } fun test(b: B, c: C, d: D) { b.foo() b.foo(a = 1, b = null, c = null) b.foo(a = 1, b = "", c = "") c.foo() c.foo(a = null, b = "", c = null) c.foo(a = 1, b = "", c = null) d.foo() d.foo(a = 1, b = null, c = null) }