You have one abstract class or interface with two unimplemented functions functionOne and functionTwo. You want, whoever implements those two functions, to have access to different resources. In the functionOne implementation, you want to permit access to propertyOne and functionOne, while in the functionTwo implementation, you want to permit access to propertyTwo and functionTwo. Two different contexts, one class to extend. Can you do it? With Kotlin, sure.