open class A { fun a(){} fun b(){} } interface I { fun b() } abstract class B : A() { open fun f(){} abstract fun g() fun h(){} } class C : B(), I { override fun equals(other: Any?): Boolean { return super.equals(other) } override fun f() { super.f() } override fun g() { TODO("Not yet implemented") } override fun hashCode(): Int { return super.hashCode() } override fun toString(): String { return super.toString() } }