trait T { fun foo(a: Int = 1, b: String = "2") } open class A: T { override fun foo(a: Int, b: String) { throw UnsupportedOperationException() } } class B: A() { override fun foo(a: Int, b: String) { throw UnsupportedOperationException() } }