Nested Interfaces and Abstract Classes
Not only can you nest classes and objects inside of classes, but you can nest interfaces as well:
class Thingy {
interface Transmogrifier {
abstract fun transmogrify(): Thingy
}
// TODO good stuff here
}
val moggle = object : Thingy.Transmogrifier {
override fun transmogrify() = Thingy()
}
val thingy = moggle.transmogrify()
Or, if you prefer, you can nest abstract classes:
class Thingy {
abstract class Transmogrifier {
abstract fun transmogrify(): Thingy
}
// TODO good stuff here
}
val moggle = object : Thingy.Transmogrifier() {
override fun transmogrify() = Thingy()
}
val thingy = moggle.transmogrify()
Naming works the same as with nested classes and named objects: you reference the nested interface or abstract class based on the outer class name (e.g., Thingy.Transmogrifier).
Prev Table of Contents Next
This book is licensed under the Creative Commons Attribution-ShareAlike 4.0 International license.