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
}
}