package override interface MyTrait { fun foo() } abstract class MyAbstractClass { abstract fun bar() } open class MyClass : MyTrait, MyAbstractClass() { override fun foo() {} override fun bar() {} } class MyChildClass : MyClass() {} class MyIllegalClass : MyTrait, MyAbstractClass() {} class MyIllegalClass2 : MyTrait, MyAbstractClass() { override fun foo() {} } class MyIllegalClass3 : MyTrait, MyAbstractClass() { override fun bar() {} } class MyIllegalClass4 : MyTrait, MyAbstractClass() { fun foo() {} override fun other() {} } class MyChildClass1 : MyClass() { fun foo() {} override fun bar() {} }