abstract class A : I1 { open fun a(){} } interface I1 { fun i1() fun i() } interface I2 { fun i2() fun a() } interface I3 { fun i() } abstract class B : I2, A(), I3 { override fun a() { super.a() } override fun equals(other: Any?): Boolean { return super.equals(other) } override fun hashCode(): Int { return super.hashCode() } override fun i() { TODO("Not yet implemented") } override fun i1() { TODO("Not yet implemented") } override fun i2() { TODO("Not yet implemented") } override fun toString(): String { return super.toString() } }