类委托(Class Delegation)
委托模式(也叫作代理模式),该模式已经被证明是继承的一个很好的替代方案,而且Kotlin本身需要支持零样板代码。Derived
类可以继承Base
接口,并将其所有的公共方法委托给指定的对象:
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
fun main(args: Array<String>) {
val b = BaseImpl(10)
Derived(b).print() // prints 10
}
类Derived
的父类列表中的by
语句表明,b将会被存储在Derived
类对象的内部,且编译器将生成所有Base
类的成员,并指向b。