namespace override namespace normal { trait 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() {} } } namespace generics { trait MyTrait { fun foo(t: T) : T } abstract class MyAbstractClass { abstract fun bar(t: T) : T } open class MyGenericClass : MyTrait, MyAbstractClass { override fun foo(t: T) = t override fun bar(t: T) = t } class MyChildClass : MyGenericClass {} class MyChildClass1 : MyGenericClass {} class MyChildClass2 : MyGenericClass { fun foo(t: T) = t override fun bar(t: T) = t } open class MyClass : MyTrait, MyAbstractClass { override fun foo(i: Int) = i override fun bar(s: String) = s } class MyIllegalGenericClass1 : MyTrait, MyAbstractClass {} class MyIllegalGenericClass2 : MyTrait, MyAbstractClass { override fun foo(r: R) = r } class MyIllegalClass1 : MyTrait, MyAbstractClass {} class MyIllegalClass2 : MyTrait, MyAbstractClass { fun foo(t: T) = t fun bar(t: T) = t } }