abstract class Base { protected abstract fun doJob(job: String, delay: Int) protected abstract fun doJobGeneric(job: T, delay: Int) } class Impl : Base() { override fun doJob(job: String, delay: Int) {} override fun doJobGeneric(job: T, delay: Int) {} }